仅显示一个类别中包含评论的帖子

时间:2013-03-21 作者:Peter

有没有人能想出一个好主意,让WP把一个类别中的所有帖子都只发表(批准的)评论?

我建立了一个电子商务网站,并将产品帖子上的评论视为证明。

现在我想要一个页面,在产品(帖子)标题和缩略图旁边显示所有这些“推荐”(评论)。

有人能帮忙吗??我尝试了很多方法,但显然不太了解循环的工作原理,无法根据这些标准进行筛选。。。。

干杯彼得

2 个回复
SO网友:Marc Dingena

要从类别中检索所有帖子,同时保留原始循环查询,请创建如下新查询:

<?php 

$testimonials = new WP_Query( 
    array( 
        \'post_status\' => \'publish\', 
        \'post_type\' => \'post\', 
        \'posts_per_page\' => 30,     // limit number of posts for which to get ALL the comments of
        \'category__in\' => array( 2, 6, 18 ) // specify the categories you want the posts of
    ) 
);

?>
变量$testimonials 现在包含指定类别中的所有帖子。您可以将其放置在当前main loop. 在里面single.php, 看起来像这样:

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); // this is the main loop, used in single.php will only contain a single post ?>

<article id="post-<?php $post->ID; ?>">

    <h1><?php the_title(); ?></h1>
    <?php the_content(); // this gets the posts\' own content ?>

    <?php $testimonials = new WP_Query( 
        array( 
            \'post_status\' => \'publish\', 
            \'post_type\' => \'post\', 
            \'posts_per_page\' => 30,     // limit number of posts for which to get ALL the comments of
            \'category__in\' => array( 2, 6, 18 ) // specify the categories you want the posts of
        ) 
    );
    if ( $testimonial->have_posts() ) : while ( $testimonial->have_posts() ) : $testimonial->the_post(); 

        // please note that $testimonial->the_post() has overwritten the original $post,
        // but since we\'re on single.php and the main post content was already fetched that\'s probably alright
        $comments = get_comments( array(
            \'status\' => \'approve\',
            \'post_id\' => $post->ID, 
            \'number\' => \'5\', // if you want to limit the number of comments on that particular post ID
        ));

        foreach( $comments as $comment ) :
            echo( $comment->comment_author . \'<br />\' . $comment->comment_content );
        endforeach;

    endwhile; // this quits the $testimonials loop, not the main loop
    endif; // end of $testimonials->have_posts()
    ?>

</article>

<?php
endwhile; // this quits the main loop
endif; // end of have_posts()
?>

SO网友:kaiser

这是WP_Comment_Query 用于此任务。然后我们得到get_all_category_ids().

所以首先我们要查询products 自定义post类型post(或其他名称)。

$products = new WP_Query( array(
     \'cat\'                    => get_all_category_ids()
    ,\'posts_per_page\'         => -1
    ,\'posts_per_archive_page\' => -1
    ,\'post_type\'              => \'products\'
) );
这将允许我们执行一个简单的循环:

if ( $products->have_posts() )
{
    while( $products->have_posts() )
    {
        the_post();
        // display thumbnail, product title, description, comments here
    }
}
然后,在循环之前,我们将获取所有注释并按ID排序:

$testimonials = new WP_Comment_Query( array(
     \'status\'   => \'approve\'
    ,\'orderby\'  => \'comment_post_ID\'
    ,\'number\'   => \'\'
) );
这将帮助我们仅执行此查询once, 因此,我们节省了处理时间。

然后,在循环内部,当显示单个产品时,我们将使用wp_list_pluck()comment_post_ID “字段”:

$testimonials_for_product = wp_list_pluck( $testimonials, \'comment_post_ID\' );
最后一步就是在它们之间循环:

foreach ( $testimonials_for_product as $tfp )
    var_dump( $tfp );
这段代码没有经过测试,因此可能需要一些测试和微调

结束

相关推荐

Remove the_content From Loop

我试图显示一个只有特定元素的自定义循环。“我的循环”当前包含标题、创建日期、作者和;所容纳之物然而,我正在尝试删除循环中每个帖子的内容,因为我不希望它在这个列表中显示得不走运。我甚至已经从循环中删除了\\u content();它仍然会在循环部分下显示帖子内容的列表。任何帮助都将不胜感激,这是我的代码:<?php query_posts(\'category_name=halloween &posts_per_page=6\'); ?> <?php if ( have_p