WordPress で最近の記事をたくさんコメントされている順にソートして取り出す方法

WordPress で最近の人気記事を一覧にする時などにコメントをベースにソートするのも良いでしょう。今から紹介するコードを functions.php にコピーすれば、特定の場所で以下のタグを書けば一覧にされます。

1
<?php postPopularList(); ?>

コードは以下です。パリパリ書かせて頂きました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
function postPopularList()
{
	global $post;
	my_query_posts(
		Array(
			'post_type' => 'post',
			'orderby' => 'date',
			'order' => 'DESC',
			'showpost' => -1,
			'posts_per_page' => -1,
			'date_from' => date('Y-m-d', strtotime('-1 weeks')),
			'date_to' => date('Y-m-d')
		)
	);
	$popularlist = Array();
	$sortcount = Array();
	if(have_posts()) {
		while(have_posts()) {
			the_post();
			array_push(
				$popularlist, 
				sprintf(
					'<li><a href="%s">%s <small>(%sコメント)</small></a></li>',
					get_permalink($post->ID),
					get_the_title(),
					$post->comment_count
				)
			);
			array_push($sortcount, $post->comment_count);
		}
	}
	wp_reset_query();
	array_multisort($sortcount, SORT_DESC, $popularlist);
	$count = 0;
	foreach($popularlist as $list) {
		$count++;
		echo $list;
		if($count >= 10)
			break;
	}
}
global $my_where;
function my_posts_where($where)
{
	global $my_where;
	return $where . $my_where;
}
function my_query_posts($query)
{
	global $wpdb, $my_where;
 
	$q = wp_parse_args($query);
	$my_where = '';
 
	if($q['date_from']) {
		if($q['date_to'])
			$my_where = " AND ( DATE($wpdb->posts.post_date) BETWEEN '" . $q['date_from'] . "' AND '" . $q['date_to'] . "' )";
		else
			$my_where = " AND DATE($wpdb->posts.post_date) >= '" . $q['date_from'] . "'";
	} else if ($q['date_to']) {
		$my_where = " AND DATE($wpdb->posts.post_date) <= '" . $q['date_to'] . "'";
	}
 
	add_filter('posts_where', 'my_posts_where');
	query_posts($query);
	remove_filter('posts_where', 'my_posts_where');
}

kz さんの my_query_posts() を使わせて頂いております。いつも愛用させて頂いております。ありがとう kz さん。

コメント

コメントは受け付けていません。