PluginProbe
Category Posts Block / 4.0
Category Posts Block v4.0
5.0.0 trunk 1.0 1.1 1.2 1.2.1 1.3 1.3.1 1.3.2 1.3.3 2.0 2.1 2.2 2.3 3.1 3.2 3.3 4.0 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.1.5 4.1.6 All 62 releases
category-posts / cat-posts.php

cat-posts.php in Category Posts Block 4.0, at cat-posts.php

317 lines 10.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /*
3 Plugin Name: Category Posts Widget
4 Plugin URI: https://wordpress.org/plugins/category-posts/
5 Description: Adds a widget that shows the most recent posts from a single category.
6 Author: Mrinal Kanti Roy
7 Version: 4.0
8 Author URI: http://profiles.wordpress.org/mkrdip/
9 */
10
11 // Don't call the file directly
12 if ( !defined( 'ABSPATH' ) ) exit;
13
14 /**
15 * Register our styles
16 *
17 * @return void
18 */
19 add_action( 'wp_enqueue_scripts', 'category_posts_widget_styles' );
20
21 function category_posts_widget_styles() {
22 wp_register_style( 'category-posts', plugins_url( 'category-posts/cat-posts.css' ) );
23 wp_enqueue_style( 'category-posts' );
24 }
25
26 /**
27 * Register thumbnail sizes.
28 *
29 * @return void
30 */
31 function category_posts_add_image_size(){
32 $sizes = get_option('mkrdip_cat_post_thumb_sizes');
33
34 if ( $sizes ){
35 foreach ( $sizes as $id=>$size ) {
36 add_image_size( 'cat_post_thumb_size' . $id, $size[0], $size[1], true );
37 }
38 }
39 }
40
41 add_action( 'init', 'category_posts_add_image_size' );
42
43
44 /**
45 * Category Posts Widget Class
46 *
47 * Shows the single category posts with some configurable options
48 */
49 class CategoryPosts extends WP_Widget {
50
51 function CategoryPosts() {
52 $widget_ops = array('classname' => 'cat-post-widget', 'description' => __('List single category posts'));
53 $this->WP_Widget('category-posts', __('Category Posts'), $widget_ops);
54 }
55
56 // Displays category posts widget on blog.
57 function widget($args, $instance) {
58 global $post;
59 $post_old = $post; // Save the post object.
60
61 extract( $args );
62
63 $sizes = get_option('mkrdip_cat_post_thumb_sizes');
64
65 // If not title, use the name of the category.
66 if( !$instance["title"] ) {
67 $category_info = get_category($instance["cat"]);
68 $instance["title"] = $category_info->name;
69 }
70
71 $valid_sort_orders = array('date', 'title', 'comment_count', 'rand');
72 if ( in_array($instance['sort_by'], $valid_sort_orders) ) {
73 $sort_by = $instance['sort_by'];
74 $sort_order = (bool) isset( $instance['asc_sort_order'] ) ? 'ASC' : 'DESC';
75 } else {
76 // by default, display latest first
77 $sort_by = 'date';
78 $sort_order = 'DESC';
79 }
80
81 // Get array of post info.
82 $cat_posts = new WP_Query(
83 "showposts=" . $instance["num"] .
84 "&cat=" . $instance["cat"] .
85 "&orderby=" . $sort_by .
86 "&order=" . $sort_order
87 );
88
89 // Excerpt length filter
90 $new_excerpt_length = create_function('$length', "return " . $instance["excerpt_length"] . ";");
91 if ( $instance["excerpt_length"] > 0 )
92 add_filter('excerpt_length', $new_excerpt_length);
93
94 echo $before_widget;
95
96 // Widget title
97 echo $before_title;
98 if( isset( $instance["title_link"] ) )
99 echo '<a href="' . get_category_link($instance["cat"]) . '">' . $instance["title"] . '</a>';
100 else
101 echo $instance["title"];
102 echo $after_title;
103
104 // Post list
105 echo "<ul>\n";
106
107 while ( $cat_posts->have_posts() )
108 {
109 $cat_posts->the_post();
110 ?>
111 <li class="cat-post-item">
112 <a class="post-title" href="<?php the_permalink(); ?>" rel="bookmark" title="Permanent link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a>
113
114
115 <?php if ( isset( $instance['date'] ) ) : ?>
116 <p class="post-date"><?php the_time("j M Y"); ?></p>
117 <?php endif; ?>
118
119 <?php
120 if (
121 function_exists('the_post_thumbnail') &&
122 current_theme_supports("post-thumbnails") &&
123 isset( $instance["thumb"] ) &&
124 has_post_thumbnail()
125 ) :
126 ?>
127 <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>">
128 <?php the_post_thumbnail( 'cat_post_thumb_size'.$this->id ); ?>
129 </a>
130 <?php endif; ?>
131
132 <?php if ( isset( $instance['excerpt'] ) ) : ?>
133 <?php the_excerpt(); ?>
134 <?php endif; ?>
135
136 <?php if ( isset( $instance['comment_num'] ) ) : ?>
137 <p class="comment-num">(<?php comments_number(); ?>)</p>
138 <?php endif; ?>
139 </li>
140 <?php
141 }
142
143 echo "</ul>\n";
144
145 echo $after_widget;
146
147 remove_filter('excerpt_length', $new_excerpt_length);
148
149 wp_reset_postdata();
150
151 }
152
153 /**
154 * Update the options
155 *
156 * @param array $new_instance
157 * @param array $old_instance
158 * @return array
159 */
160 function update($new_instance, $old_instance) {
161 $sizes = get_option('mkrdip_cat_post_thumb_sizes');
162
163 if ( !$sizes ) {
164 $sizes = array();
165 }
166
167 $sizes[$this->id] = array($new_instance['thumb_w'], $new_instance['thumb_h']);
168 update_option('mkrdip_cat_post_thumb_sizes', $sizes);
169
170 return $new_instance;
171 }
172
173 /**
174 * The widget configuration form back end.
175 *
176 * @param array $instance
177 * @return void
178 */
179 function form($instance) {
180 $instance = wp_parse_args( ( array ) $instance, array(
181 'title' => __( '' ),
182 'cat' => __( '' ),
183 'num' => __( '' ),
184 'sort_by' => __( '' ),
185 'asc_sort_order' => __( '' ),
186 'title_link' => __( '' ),
187 'excerpt' => __( '' ),
188 'excerpt_length' => __( '' ),
189 'comment_num' => __( '' ),
190 'date' => __( '' ),
191 'thumb' => __( '' ),
192 'thumb_w' => __( '' ),
193 'thumb_h' => __( '' )
194 ) );
195
196 $title = $instance['title'];
197 $cat = $instance['cat'];
198 $num = $instance['num'];
199 $sort_by = $instance['sort_by'];
200 $asc_sort_order = $instance['asc_sort_order'];
201 $title_link = $instance['title_link'];
202 $excerpt = $instance['excerpt'];
203 $excerpt_length = $instance['excerpt_length'];
204 $comment_num = $instance['comment_num'];
205 $date = $instance['date'];
206 $thumb = $instance['thumb'];
207 $thumb_w = $instance['thumb_w'];
208 $thumb_h = $instance['thumb_h'];
209
210 ?>
211 <p>
212 <label for="<?php echo $this->get_field_id("title"); ?>">
213 <?php _e( 'Title' ); ?>:
214 <input class="widefat" id="<?php echo $this->get_field_id("title"); ?>" name="<?php echo $this->get_field_name("title"); ?>" type="text" value="<?php echo esc_attr($instance["title"]); ?>" />
215 </label>
216 </p>
217
218 <p>
219 <label>
220 <?php _e( 'Category' ); ?>:
221 <?php wp_dropdown_categories( array( 'name' => $this->get_field_name("cat"), 'selected' => $instance["cat"] ) ); ?>
222 </label>
223 </p>
224
225 <p>
226 <label for="<?php echo $this->get_field_id("num"); ?>">
227 <?php _e('Number of posts to show'); ?>:
228 <input style="text-align: center;" id="<?php echo $this->get_field_id("num"); ?>" name="<?php echo $this->get_field_name("num"); ?>" type="text" value="<?php echo absint($instance["num"]); ?>" size='3' />
229 </label>
230 </p>
231
232 <p>
233 <label for="<?php echo $this->get_field_id("sort_by"); ?>">
234 <?php _e('Sort by'); ?>:
235 <select id="<?php echo $this->get_field_id("sort_by"); ?>" name="<?php echo $this->get_field_name("sort_by"); ?>">
236 <option value="date"<?php selected( $instance["sort_by"], "date" ); ?>>Date</option>
237 <option value="title"<?php selected( $instance["sort_by"], "title" ); ?>>Title</option>
238 <option value="comment_count"<?php selected( $instance["sort_by"], "comment_count" ); ?>>Number of comments</option>
239 <option value="rand"<?php selected( $instance["sort_by"], "rand" ); ?>>Random</option>
240 </select>
241 </label>
242 </p>
243
244 <p>
245 <label for="<?php echo $this->get_field_id("asc_sort_order"); ?>">
246 <input type="checkbox" class="checkbox"
247 id="<?php echo $this->get_field_id("asc_sort_order"); ?>"
248 name="<?php echo $this->get_field_name("asc_sort_order"); ?>"
249 <?php checked( (bool) $instance["asc_sort_order"], true ); ?> />
250 <?php _e( 'Reverse sort order (ascending)' ); ?>
251 </label>
252 </p>
253
254 <p>
255 <label for="<?php echo $this->get_field_id("title_link"); ?>">
256 <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id("title_link"); ?>" name="<?php echo $this->get_field_name("title_link"); ?>"<?php checked( (bool) $instance["title_link"], true ); ?> />
257 <?php _e( 'Make widget title link' ); ?>
258 </label>
259 </p>
260
261 <p>
262 <label for="<?php echo $this->get_field_id("excerpt"); ?>">
263 <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id("excerpt"); ?>" name="<?php echo $this->get_field_name("excerpt"); ?>"<?php checked( (bool) $instance["excerpt"], true ); ?> />
264 <?php _e( 'Show post excerpt' ); ?>
265 </label>
266 </p>
267
268 <p>
269 <label for="<?php echo $this->get_field_id("excerpt_length"); ?>">
270 <?php _e( 'Excerpt length (in words):' ); ?>
271 </label>
272 <input style="text-align: center;" type="text" id="<?php echo $this->get_field_id("excerpt_length"); ?>" name="<?php echo $this->get_field_name("excerpt_length"); ?>" value="<?php echo $instance["excerpt_length"]; ?>" size="3" />
273 </p>
274
275 <p>
276 <label for="<?php echo $this->get_field_id("comment_num"); ?>">
277 <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id("comment_num"); ?>" name="<?php echo $this->get_field_name("comment_num"); ?>"<?php checked( (bool) $instance["comment_num"], true ); ?> />
278 <?php _e( 'Show number of comments' ); ?>
279 </label>
280 </p>
281
282 <p>
283 <label for="<?php echo $this->get_field_id("date"); ?>">
284 <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id("date"); ?>" name="<?php echo $this->get_field_name("date"); ?>"<?php checked( (bool) $instance["date"], true ); ?> />
285 <?php _e( 'Show post date' ); ?>
286 </label>
287 </p>
288
289 <?php if ( function_exists('the_post_thumbnail') && current_theme_supports("post-thumbnails") ) : ?>
290 <p>
291 <label for="<?php echo $this->get_field_id("thumb"); ?>">
292 <input type="checkbox" class="checkbox" id="<?php echo $this->get_field_id("thumb"); ?>" name="<?php echo $this->get_field_name("thumb"); ?>"<?php checked( (bool) $instance["thumb"], true ); ?> />
293 <?php _e( 'Show post thumbnail' ); ?>
294 </label>
295 </p>
296 <p>
297 <label>
298 <?php _e('Thumbnail dimensions (in pixels)'); ?>:<br />
299 <label for="<?php echo $this->get_field_id("thumb_w"); ?>">
300 Width: <input class="widefat" style="width:30%;" type="text" id="<?php echo $this->get_field_id("thumb_w"); ?>" name="<?php echo $this->get_field_name("thumb_w"); ?>" value="<?php echo $instance["thumb_w"]; ?>" />
301 </label>
302
303 <label for="<?php echo $this->get_field_id("thumb_h"); ?>">
304 Height: <input class="widefat" style="width:30%;" type="text" id="<?php echo $this->get_field_id("thumb_h"); ?>" name="<?php echo $this->get_field_name("thumb_h"); ?>" value="<?php echo $instance["thumb_h"]; ?>" />
305 </label>
306 </label>
307 </p>
308 <?php endif; ?>
309
310 <?php
311
312 }
313
314 }
315
316 add_action( 'widgets_init', create_function('', 'return register_widget("CategoryPosts");') );
317