查询所有帖子,并且不重复相同的标签

时间:2018-08-28 作者:Mr.CAT

我需要一个查询来显示网站中的所有帖子,但不要重复那些带有相同标签的帖子,我的意思是只显示一个带有相同标签的帖子。

我当前的查询是

    <?php
        $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
        $args = array(
        \'post_type\' => array(\'post\'),
        \'posts_per_page\' => 30,
        \'paged\' => $paged,
        \'order\' => \'ASC\',
        \'orderby\' => \'name\' 
        );
        query_posts($args);
    ?>
如何仅显示具有相同标记的帖子?

谢谢

2 个回复
SO网友:Castiblanco

您可以尝试以下操作:

<?php

$tags_array   = get_tags();
$news_query  = new WP_Query;

foreach ( $tags_array as $tags ) :
    $news_query->query( array(
        \'cat\'                 => $tags->term_id,
        \'posts_per_page\'      => 1,
        \'no_found_rows\'       => true,
        \'ignore_sticky_posts\' => true,
    ));

    ?>

    <h2><?php echo esc_html( $tags->name ) ?></h2>

    <?php while ( $news_query->have_posts() ) : $news_query->the_post() ?>

            <div class="post">
                <?php the_title() ?>
                <!-- do whatever you else you want that you can do in a normal loop -->
            </div>  

    <?php endwhile ?>

<?php endforeach ?>

SO网友:Trisha

我认为@Castiblanco有一个正确的答案,也许需要一些调整?他的解决方案当然会奏效,但我会稍微改变一下,比如:

    <?php

    $tags_array   = get_tags();

    foreach ( $tags_array as $tags ) :
        $args( array(
        \'cat\'                 => $tags->term_id,
        \'posts_per_page\'      => 1,
        \'no_found_rows\'       => true,
        \'ignore_sticky_posts\' => true,
    ));
    query_posts($args);
    if (have_posts()) : 
    ?>

    <h2><?php echo esc_html( $tags->name ) ?></h2>

    <?php while (have_posts()) : the_post();  ?>

        <div class="post">
            <?php the_title() ?>
            <!-- do whatever you else you want that you can do in a normal loop -->
        </div>  

    <?php endwhile ?>

<?php endforeach ?>
我这样做的原因只是为了简化查询并创建一个新对象,而不是像前面提到的那样使用->query。请确保重置postdata,如果页面上有其他循环,请确保在结束时使用wp\\u reset\\u query()重置查询。

结束