View difference between Paste ID: rseTDgSf and PEJ1bwTy
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+