<?php
/**
* カスタムクエリの作成
*/
add_filter('posts_join', 'comment_search_join' );
function comment_search_join( $join ) {
global $wpdb;
// 検索処理の時、コメントがついている投稿のみ取得
if( is_search() ) {
$join .= " INNER JOIN {$wpdb->comments} ON {$wpdb->posts}.ID = {$wpdb->comments}.comment_post_ID ";
}
return $join;
}
function commented_posts($where) {
global $wpdb;
if (条件) {
$where .= " AND $wpdb->posts.comment_count > 0";
}
return $where;
}
add_filter('posts_where_paged', 'commented_posts');
function change_posts_per_page($query) {
if (is_admin() || !$query->is_main_query()) return;
if (条件) {
$query->set('posts_per_page', 10);
}
}
add_action('pre_get_posts', 'change_posts_per_page');
pre_get_post フックだけでは、コメント数で絞り込めないので、関数二つになっています。もっといい方法があるかもしれません。Codex のページは以下です。posts_where_paged の公式ドキュメントは見つかりませんでした。wp-content/query.php をご覧ください。
Plugin API/Filter Reference/posts where
Plugin API/Action Reference/pre get posts