WordPressでコメントの数によって記事を抽出したいと思い方法を調べてみました。
たとえば、
・口コミサイトでやりとりが活発な商品データのみを抽出する
・コメントがゼロの記事を抽出し、活性化を促す
などの使い方を想定しています。
ADs
get_posts()でコメント数が5件以上10件以下の記事を取得する例です。
最低限のオプションしか記述していませんが、「post_per_page」や「meta_key」などいつものオプションも併用できます。
1 2 3 4 5 6 7 8 9 |
$posts = get_posts(array( 'comment_num' => array(5,10),//たとえば、コメント数が5件以上10件以下の記事を取得 'suppress_filters' => false ) ); //あとは自由にループ foreach($posts as $post){ ...以下略 |
「comment_num」はもともとget_posts()のオプションにはないオレオレオプションです。
配列のときは○以上○以下のコメント数を持つ記事、数値の場合はその件数のコメントを持つ記事を抽出します。
「suppress_filters」は後で使う「posts_where」を有効にするためのオプションです。
以下をfunctions.phpに記述します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
//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 <= %s",$comment_num[0],$comment_num[1]); } //数値のときはコメント数と合致する記事を取得 if(is_numeric($comment_num)){ $where .= $wpdb->prepare(" AND $wpdb->posts.comment_count = %s",$comment_num); } return $where; } //実行 add_action( 'posts_where', 'comment_num_where',10,2 ); |
$_GETなどで数値を外部から渡す場合はis_numeric()などによる細かな判定が必要だと思いますので、あくまで最低限ということで…。
コメントを軸としたサイトで使える手法かもしれません。
参考になれば幸いです。
ADs
コメントはまだありません。