web-dev-qa-db-fra.com

utiliser wp_query pour retourner les messages avec/nombre de commentaires>

J'ai consulté de nombreux exemples de wp_query et je n'arrive pas à comprendre cela. Si la chose que je comparais était une méta-valeur, je pourrais le faire avec une méta-requête, mais apparemment, vous ne pouvez pas comparer avec une valeur non-méta?

Voici ce que je pensais que cela fonctionnerait:

$commentpost = new WP_Query( array( 'key' => 'comment_count',
                                'value' => '0',
                                'compare' => '>',                                                    
                                'orderby' => 'comment_count',
                                'order' => 'DESC', 
                               ) );

Toute aide serait appréciée.

2
Patrick Johnson

Alors que la classe WP_Query a la possibilité native de orderby le comment_count, elle n'a pas la même chose à interroger en fonction de ceux-ci. Mais quand on regarde la table posts-, on voit qu’il n’ya pas grand chose à changer

ID | post_author | post_date | post_date_gmt | post_content | post_title | post_excerpt | post_status | comment_status | ping_status | post_password | post_name | to_ping | pinged | post_modified | post_modified_gmt | post_content_filtered | post_parent | guid | menu_order | post_type | post_mime_type | comment_count

Nous pourrions donc intercepter la requête et modifier la clause WHERE dans le filtre posts_where-.

<?php
defined( 'ABSPATH' ) or exit;
/* Plugin Name: (#121083) Query WHERE comment count not is 0 */

add_filter( 'posts_where', 'wpse121083WhereCommentCountNotNull' );
function wpse121083WhereCommentCountNotNull( $where )
{
    // Don't fire more than once:
    remove_filter( current_filter(), __FUNCTION__ );

    # @TODO Add abort clauses/cases here

    return "{$where} AND {$GLOBALS['wpdb']->posts}.comment_count != 0";
}

Vous devez toujours renseigner les éléments, comme des cas où vous ne souhaitez pas intercepter la requête. Gardez à l'esprit que ce n'est pas testé.

2
kaiser