口コミサイトなどで重宝されるであろう、コメント数に応じて記事をソートする方法を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に指定するのを忘れないようにしましょう。