Search code examples
wordpresscommentspost-meta

Wordpress - Query comments by post meta


I am using the code below (simplified) to display a list of the last 10 comments:

<?php 

$args = array(
    'post_type'      => 'tarefa',
    'number'         => '10',
    'order'          => 'DESC',
    'orderby'        => 'comment_date',
    //'meta_key'        => 'field_name',
    //'meta_value'      => 'field_value',
);

$comments_query = new WP_Comment_Query;
$comments = $comments_query->query( $args );

foreach ( $comments as $comment ) {
    echo '<p>';
    echo get_the_title($comment->comment_post_ID) . '<br>'; //post title
    echo $comment->comment_content; // comment content
    echo '</p>';
};

?>

Question:

Well, meta_key and meta_value seem to be associated to comment_meta... But in my case, I have to display comments based on post_meta key and value.

Any sugestions?


Solution

  • You can try this code. You need to add a query for posts to get array of post ides with meta key. Then use that array into comments query argument.

    //QUERY FOR POSTS WITH META KEY AND VALUE (META QUERY)
    $post_args = array(
        'post_type'  => 'post',
        'meta_key'     => 'meta key',//Meta key of post
        'meta_value'   => 'meta value',//String or Numeric value
        'meta_compare' => '=',
    );
    $post_query = new WP_Query( $post_args );
    $posts_array= array();
    if ( $post_query->have_posts() ) {
        while ( $post_query->have_posts() ) {
            $post_query->the_post();
    
            $posts_array[] = get_the_ID(); //Array of post ids
    
        }
        wp_reset_postdata();
    }
    
    
    
    //YOUR COMMENT ARGS SHOULD BE THIS
    $args = array(
        'post_type'      => 'tarefa',
        'number'         => '10',
        'order'          => 'DESC',
        'orderby'        => 'comment_date',
        'post__in'        => $posts_array, //THIS IS THE ARRAY OF POST IDS WITH META QUERY
    );
    

    Try this , then let me know the result.