SHOW:
|
|
- or go back to the newest paste.
1 | <?php | |
2 | /* | |
3 | - | Plugin Name: Category Posts Widget |
3 | + | Plugin Name: Category Archive Posts Widget |
4 | - | Plugin URI: http://jameslao.com/2011/03/24/category-posts-widget-3-2/ |
4 | + | Plugin URI: N/A - based on http://jameslao.com/2011/03/24/category-posts-widget-3-2/ |
5 | - | Description: Adds a widget that can display posts from a single category. 2011 Hacked by alchymyth to show posts from the single post's categories. widget restricted to single post by code in line 79 and 133. |
5 | + | Description: Adds a widget that can display posts from category archive's category, or from all categories. |
6 | - | Author: James Lao |
6 | + | 2012 Hacked by alchymyth to show posts from the category archive's category; all categories otherwise. |
7 | - | Version: 3.2 |
7 | + | Author: originally: James Lao |
8 | Version: n/a | |
9 | Author URI: http://jameslao.com/ | |
10 | */ | |
11 | ||
12 | // Register thumbnail sizes. | |
13 | if ( function_exists('add_image_size') ) | |
14 | { | |
15 | $sizes = get_option('jlao_cat_post_thumb_sizes'); | |
16 | if ( $sizes ) | |
17 | { | |
18 | foreach ( $sizes as $id=>$size ) | |
19 | add_image_size( 'cat_post_thumb_size' . $id, $size[0], $size[1], true ); | |
20 | } | |
21 | } | |
22 | ||
23 | class CategoryPosts extends WP_Widget { | |
24 | ||
25 | - | parent::WP_Widget(false, $name='Category Posts'); |
25 | + | |
26 | parent::WP_Widget(false, $name='Category Archive Posts'); | |
27 | } | |
28 | ||
29 | /** | |
30 | * Displays category posts widget on blog. | |
31 | */ | |
32 | function widget($args, $instance) { | |
33 | global $post; | |
34 | $post_old = $post; // Save the post object. | |
35 | ||
36 | extract( $args ); | |
37 | ||
38 | $sizes = get_option('jlao_cat_post_thumb_sizes'); | |
39 | ||
40 | // If not title, use the name of the category. | |
41 | - | //alchymyth edit: set widget title to 'Category Posts' for option 'use post categories' |
41 | + | |
42 | - | if( $instance["cat"] == 0 ) { $instance["title"] = 'Category Posts'; } else { |
42 | + | //alchymyth edit: set widget title to 'Category Archive Posts' for option 'use archive category' |
43 | if( $instance["cat"] == 0 ) { $instance["title"] = 'Category Archive Posts'; } else { | |
44 | $category_info = get_category($instance["cat"]); | |
45 | $instance["title"] = $category_info->name; | |
46 | } //end alchymyth edit | |
47 | } | |
48 | ||
49 | $valid_sort_orders = array('date', 'title', 'comment_count', 'random'); | |
50 | if ( in_array($instance['sort_by'], $valid_sort_orders) ) { | |
51 | $sort_by = $instance['sort_by']; | |
52 | $sort_order = (bool) $instance['asc_sort_order'] ? 'ASC' : 'DESC'; | |
53 | } else { | |
54 | // by default, display latest first | |
55 | $sort_by = 'date'; | |
56 | $sort_order = 'DESC'; | |
57 | } | |
58 | - | //alchymyth edit: get the single post's categories |
58 | + | |
59 | //alchymyth edit: get the category archive's category | |
60 | if( $instance["cat"] == '0' ) { | |
61 | - | $posts_categories = wp_get_post_categories($post->ID); |
61 | + | |
62 | - | $use_categories = implode(',', $posts_categories); |
62 | + | if( is_category() ) { $use_categories = get_query_var('cat'); } else { $use_categories = 0; } |
63 | } else { $use_categories = $instance["cat"]; } | |
64 | //end of alchymyth edit | |
65 | ||
66 | // Get array of post info. | |
67 | $cat_posts = new WP_Query( | |
68 | "showposts=" . $instance["num"] . | |
69 | "&cat=" . $use_categories . //alchymyth edit | |
70 | "&orderby=" . $sort_by . | |
71 | "&order=" . $sort_order | |
72 | ); | |
73 | ||
74 | // Excerpt length filter | |
75 | $new_excerpt_length = create_function('$length', "return " . $instance["excerpt_length"] . ";"); | |
76 | if ( $instance["excerpt_length"] > 0 ) | |
77 | add_filter('excerpt_length', $new_excerpt_length); | |
78 | ||
79 | - | if( is_single() ) : //alchymyth edit: restrict the widget output to single post |
79 | + | |
80 | ||
81 | // Widget title | |
82 | echo $before_title; | |
83 | if( $instance["title_link"] ) | |
84 | echo '<a href="' . get_category_link($instance["cat"]) . '">' . $instance["title"] . '</a>'; | |
85 | else | |
86 | echo $instance["title"]; | |
87 | echo $after_title; | |
88 | ||
89 | // Post list | |
90 | echo "<ul>\n"; | |
91 | ||
92 | while ( $cat_posts->have_posts() ) | |
93 | { | |
94 | $cat_posts->the_post(); | |
95 | ?> | |
96 | <li class="cat-post-item"> | |
97 | <a class="post-title" href="<?php the_permalink(); ?>" rel="bookmark" title="Permanent link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a> | |
98 | ||
99 | <?php | |
100 | if ( | |
101 | function_exists('the_post_thumbnail') && | |
102 | current_theme_supports("post-thumbnails") && | |
103 | $instance["thumb"] && | |
104 | has_post_thumbnail() | |
105 | ) : | |
106 | ?> | |
107 | <a href="<?php the_permalink(); ?>" title="<?php the_title_attribute(); ?>"> | |
108 | <?php the_post_thumbnail( 'cat_post_thumb_size'.$this->id ); ?> | |
109 | </a> | |
110 | <?php endif; ?> | |
111 | ||
112 | <?php if ( $instance['date'] ) : ?> | |
113 | <p class="post-date"><?php the_time("j M Y"); ?></p> | |
114 | <?php endif; ?> | |
115 | ||
116 | <?php if ( $instance['excerpt'] ) : ?> | |
117 | <?php the_excerpt(); ?> | |
118 | <?php endif; ?> | |
119 | ||
120 | <?php if ( $instance['comment_num'] ) : ?> | |
121 | <p class="comment-num">(<?php comments_number(); ?>)</p> | |
122 | <?php endif; ?> | |
123 | </li> | |
124 | <?php | |
125 | } | |
126 | ||
127 | echo "</ul>\n"; | |
128 | ||
129 | echo $after_widget; | |
130 | ||
131 | remove_filter('excerpt_length', $new_excerpt_length); | |
132 | ||
133 | - | endif; // end alchymyth edit: end if( is_single() ) : //restrict the widget output to single posts |
133 | + | |
134 | ||
135 | remove_filter('wp_dropdown_cats', 'use_posts_cats'); | |
136 | ||
137 | } | |
138 | ||
139 | /** | |
140 | * Form processing... Dead simple. | |
141 | */ | |
142 | function update($new_instance, $old_instance) { | |
143 | /** | |
144 | * Save the thumbnail dimensions outside so we can | |
145 | * register the sizes easily. We have to do this | |
146 | * because the sizes must registered beforehand | |
147 | * in order for WP to hard crop images (this in | |
148 | * turn is because WP only hard crops on upload). | |
149 | * The code inside the widget is executed only when | |
150 | * the widget is shown so we register the sizes | |
151 | * outside of the widget class. | |
152 | */ | |
153 | if ( function_exists('the_post_thumbnail') ) | |
154 | { | |
155 | $sizes = get_option('jlao_cat_post_thumb_sizes'); | |
156 | if ( !$sizes ) $sizes = array(); | |
157 | $sizes[$this->id] = array($new_instance['thumb_w'], $new_instance['thumb_h']); | |
158 | update_option('jlao_cat_post_thumb_sizes', $sizes); | |
159 | } | |
160 | ||
161 | return $new_instance; | |
162 | } | |
163 | ||
164 | /** | |
165 | * The configuration form. | |
166 | */ | |
167 | function form($instance) { | |
168 | ?> | |
169 | <p> | |
170 | <label for="<?php echo $this->get_field_id("title"); ?>"> | |
171 | <?php _e( 'Title' ); ?>: | |
172 | <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"]); ?>" /> | |
173 | </label> | |
174 | </p> | |
175 | ||
176 | <p> | |
177 | <label> | |
178 | <?php _e( 'Category' ); ?>: | |
179 | <?php | |
180 | wp_dropdown_categories( array( 'name' => $this->get_field_name("cat"), 'selected' => $instance["cat"] ) ); ?> | |
181 | </label> | |
182 | </p> | |
183 | ||
184 | <p> | |
185 | <label for="<?php echo $this->get_field_id("num"); ?>"> | |
186 | <?php _e('Number of posts to show'); ?>: | |
187 | <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' /> | |
188 | </label> | |
189 | </p> | |
190 | ||
191 | <p> | |
192 | <label for="<?php echo $this->get_field_id("sort_by"); ?>"> | |
193 | <?php _e('Sort by'); ?>: | |
194 | <select id="<?php echo $this->get_field_id("sort_by"); ?>" name="<?php echo $this->get_field_name("sort_by"); ?>"> | |
195 | <option value="date"<?php selected( $instance["sort_by"], "date" ); ?>>Date</option> | |
196 | <option value="title"<?php selected( $instance["sort_by"], "title" ); ?>>Title</option> | |
197 | <option value="comment_count"<?php selected( $instance["sort_by"], "comment_count" ); ?>>Number of comments</option> | |
198 | <option value="random"<?php selected( $instance["sort_by"], "random" ); ?>>Random</option> | |
199 | </select> | |
200 | </label> | |
201 | </p> | |
202 | ||
203 | <p> | |
204 | <label for="<?php echo $this->get_field_id("asc_sort_order"); ?>"> | |
205 | <input type="checkbox" class="checkbox" | |
206 | id="<?php echo $this->get_field_id("asc_sort_order"); ?>" | |
207 | name="<?php echo $this->get_field_name("asc_sort_order"); ?>" | |
208 | <?php checked( (bool) $instance["asc_sort_order"], true ); ?> /> | |
209 | <?php _e( 'Reverse sort order (ascending)' ); ?> | |
210 | </label> | |
211 | </p> | |
212 | ||
213 | <p> | |
214 | <label for="<?php echo $this->get_field_id("title_link"); ?>"> | |
215 | <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 ); ?> /> | |
216 | <?php _e( 'Make widget title link' ); ?> | |
217 | </label> | |
218 | </p> | |
219 | ||
220 | <p> | |
221 | <label for="<?php echo $this->get_field_id("excerpt"); ?>"> | |
222 | <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 ); ?> /> | |
223 | <?php _e( 'Show post excerpt' ); ?> | |
224 | </label> | |
225 | </p> | |
226 | ||
227 | <p> | |
228 | <label for="<?php echo $this->get_field_id("excerpt_length"); ?>"> | |
229 | <?php _e( 'Excerpt length (in words):' ); ?> | |
230 | </label> | |
231 | <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" /> | |
232 | </p> | |
233 | ||
234 | <p> | |
235 | <label for="<?php echo $this->get_field_id("comment_num"); ?>"> | |
236 | <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 ); ?> /> | |
237 | <?php _e( 'Show number of comments' ); ?> | |
238 | </label> | |
239 | </p> | |
240 | ||
241 | <p> | |
242 | <label for="<?php echo $this->get_field_id("date"); ?>"> | |
243 | <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 ); ?> /> | |
244 | <?php _e( 'Show post date' ); ?> | |
245 | </label> | |
246 | </p> | |
247 | ||
248 | <?php if ( function_exists('the_post_thumbnail') && current_theme_supports("post-thumbnails") ) : ?> | |
249 | <p> | |
250 | <label for="<?php echo $this->get_field_id("thumb"); ?>"> | |
251 | <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 ); ?> /> | |
252 | <?php _e( 'Show post thumbnail' ); ?> | |
253 | </label> | |
254 | </p> | |
255 | <p> | |
256 | <label> | |
257 | <?php _e('Thumbnail dimensions'); ?>:<br /> | |
258 | <label for="<?php echo $this->get_field_id("thumb_w"); ?>"> | |
259 | W: <input class="widefat" style="width:40%;" 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"]; ?>" /> | |
260 | </label> | |
261 | ||
262 | <label for="<?php echo $this->get_field_id("thumb_h"); ?>"> | |
263 | H: <input class="widefat" style="width:40%;" 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"]; ?>" /> | |
264 | </label> | |
265 | </label> | |
266 | </p> | |
267 | <?php endif; ?> | |
268 | ||
269 | <?php | |
270 | ||
271 | } | |
272 | ||
273 | } | |
274 | ||
275 | add_action( 'widgets_init', create_function('', 'return register_widget("CategoryPosts");') ); | |
276 | ||
277 | //alchymyth edit: add top option to dropdown | |
278 | add_filter('wp_dropdown_cats', 'use_posts_cats'); | |
279 | function use_posts_cats($list) { | |
280 | $list = str_replace("class='postform' >", "class='postform' >\n<option class=\"level-0\" value=\"0\">use archive category</option>\n", $list); | |
281 | return $list; }; | |
282 | //end alchymyth edit | |
283 | ||
284 | - | $list = str_replace("class='postform' >", "class='postform' >\n<option class=\"level-0\" value=\"0\">use post categories</option>\n", $list); |
284 | + |