wordpress カスタマイズ コメント

WordPressの記事をget_posts関数をカスタマイズして、コメントの数でソートして自由に出力する方法

口コミサイトなどで重宝されるであろう、コメント数に応じて記事をソートする方法をWordPressサイト使用者向けに紹介しています。

使い所

この方法を使用する人は以下の2タイプの人かと思います。もちろんそうで無い人もいると思いますが・・・

  • 口コミサイトでやりとりが活発な商品データのみを抽出する
  • コメントがゼロの記事を抽出し、マーケティングに使う
  • 逆にコメントがたくさんされている記事を、反応が高い記事として扱い、記事一覧のトップに持っていく。

テンプレート側の記述

ポイント:get_posts()関数を使用しよう

get_posts関数には、コメント数の多い順とか少ない順で出力する機能があります。そんな人は、get_posts関数をそのまま使用すれば良いですが、例えば、コメントが5〜10件ついた記事だけ出したいなんて場合はカスタマイズが必要です。get_postsにオリジナルのパラメータcomment_numを設定して対応します。

get_posts()関数にオリジナルのパラメータを付与

プラグインとして、またはfunctions.phpに以下を記入します。

//WHERE句を操作
function comment_num_where($where,$query){
		global $wpdb;

		//オリジナルのパラメータの「comment_num」を取得
		$comment_num = $query->get('comment_num');
		
		//配列のときは上限、下限で取得
		if(is_array($comment_num)){
			$where .= $wpdb->prepare(" AND $wpdb->posts.comment_count >= %s AND  $wpdb->posts.comment_count prepare(" AND $wpdb->posts.comment_count = %s",$comment_num);
		}
		return $where;
}

//実行
add_action( 'posts_where', 'comment_num_where',10,2 );

これで、オリジナルパラメータの付与が完了しました。

使用例

get_posts()でコメント数が5件以上10件以下の記事を取得する例を紹介します。
最低限のオプションしか記述していません。

$posts = get_posts(array(
        //オリジナルのパラメータ
	'comment_num' => array(5,10),//たとえば、コメント数が5件以上10件以下の記事を取得
	'suppress_filters' => false
	)
);

//あとは自由にループ
foreach($posts as $post){
...以下略
}

get_posts()は「suppress_filters」がtrue(デフォルト)の場合、「posts_where」や「posts_join」などのクエリを操作するフィルターが無視されます。なので、これに限らず、パラメータをオリジナルで付与したりする場合は「posts_where」や「posts_join」をfalseに指定するのを忘れないようにしましょう。