Возвращать только сообщения с комментариями в Wordpress

Я удивлен, что не могу найти много по этой теме, возможно, я запутался.

Я создаю страницу архива комментариев. Я хочу получить все сообщения с комментариями, где я укажу заголовок сообщения, за которым следуют все комментарии к этому сообщению, используя wp_list_comments или WP Comment Query.

Мой вопрос заключается в том, как я могу фильтровать WP_Query(), чтобы я мог возвращать только сообщения с комментариями.

Я пытался изменить этот подход список сообщений без комментариев - ответ постпостмодерна а я хочу сделать с точностью до наоборот.

Вот функция:

function filter_comment_count( $sql ){
    global $wpdb;
    $comment_count = get_query_var( 'comment_count' );

    if( is_numeric($comment_count) )
        $sql .= $wpdb->prepare( " AND {$wpdb->posts}.comment_count != %d ", $comment_count);

    return $sql;
    }
add_filter( 'posts_where', 'filter_comment_count'  );

И затем я пытаюсь использовать его в своем цикле, вот отрывок:

$args = array (
    'comment_count'  => '0'
    'pagination'     => true,
    'posts_per_page' => '10',
);

$the_query = new WP_Query($args); 
    while($the_query->have_posts()) : $the_query->the_post();  
        get_template_part( 'content', get_post_format() );
    endwhile;
wp_reset_postdata();

Я предполагаю, что бит, который меня сбивает с толку, это AND {$wpdb->posts}.comment_count != %d я хочу, чтобы он возвращал comment_count не равный 0 или что-то еще, что позволяет мне получать только сообщения с комментариями в моем WP_Query($args);

Также я не уверен, куда поставить remove_filter( 'posts_where', 'filter_comment_count' );?

Я понимаю, что есть 'orderby' => 'comment_count', но это не совсем помогает моей ситуации, насколько я понимаю.


person stemie    schedule 20.08.2014    source источник


Ответы (2)


Может не дать точных результатов, которые вы хотите, и не быть эффективным, но это все, о чем я могу думать:

Внутри вашего цикла добавьте:

$comments = get_comments(array('post_id' => $post->ID));
if ($comments !== '' && !empty($comments)) {
// The rest.
}

И это должно выводить только сообщения, с которыми связаны комментарии.

Редактировать:

Есть также

    if( 0 < $post->comment_count ){

        // Output

    }

Который я получил отсюда: https://wordpress.stackexchange.com/questions/125577/only-display-posts-with-comments

person Voltlight    schedule 20.08.2014

Старый вопрос, но если кто-то наткнется на это, как я, WordPress 4.9 добавил параметр «comment_count» в WP_Query.

Значение может быть либо целым числом требуемых комментариев, либо массивом, где первый аргумент — это «значение», а второй — оператор поиска «сравнить».

Чтобы возвращать сообщения только с комментариями:

$args = array(
    'comment_count'  => array(
        'value'   => 0,
        'compare' => '>',
    ),
    'pagination'     => true,
    'posts_per_page' => 10,
);
$the_query = WP_Query( $args );

См. https://developer.wordpress.org/reference/classes/wp_query/#comment-parameters.

person Johny Harris    schedule 01.02.2021