Get posts with no tags?

时间:2014-11-07 作者:user1437251

我有1000多篇没有标签的帖子。基本上,我尝试在前端显示没有标签的帖子,以便用户可以从前端添加标签。

我在循环中使用这种方法,以便显示没有标签的帖子。

<?php
    $tag = get_the_tags();
    if (! $tag) { ?>
        <a href="<?php the_permalink();?>"><?php the_title() ?></a><br>
    <?php }
?>  
但是有没有一种方法可以让我使用WP\\u Query()本身进行过滤,因为$args没有正确地应用于上述方法。

谢谢

完整代码-

<?php 

$args = array(
    \'post_type\'  => \'post\',
);

$the_query = new WP_Query($args ); ?>
<?php if ( $the_query->have_posts() ) : ?>
    <?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
        <?php
            $tag = get_the_tags();
            if (! $tag) { ?>
                <a href="<?php the_permalink();?>"><?php the_title() ?></a><br>
            <?php }
         ?>         
    <?php endwhile; ?>
    <?php wp_reset_postdata(); ?>

<?php else : ?>
    <p><?php _e( \'Sorry, no posts matched your criteria.\' ); ?></p>
<?php endif; ?>
<?php wp_reset_query(); ?>

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

我现在无法编写代码,但有一个想法

一千篇帖子相当多,但如果你一次从db中检索所有帖子,那就更重要了。如果您有一万个帖子,其中只有十个或二十个在整个重新标记操作之后没有标记,那该怎么办。这可能会成为一个巨大的查询,您可能会遇到超时的危险

我建议如下:

如果此操作仅用于重新标记而无需分页,请使用get_posts. WP_Query 返回大量不必要的信息。

在任何给定时间检索可管理数量的标签,比如说一次检索100个标签,直到完成为止。这不仅可以更快地加载,而且您的列表也不会太多。如果愿意,您也可以对列表分页,但为了不让用户感到不知所措,我不会这样做。坚持一页。

要正确管理和检索没有标签的帖子,您首先需要获得所有标签的列表。这可以通过函数简单地完成get_tags(). 您很可能只需要从返回的标记对象数组中获取ID。为此,您可以利用wp_list_pluck

然后,可以在查询中使用此选项来排除所有附加了标记的帖子。您可以使用tag__not_in 参数这将只检索现在没有任何标签的帖子

这里是一个概念查询(注意:未测试,如前所述,只有一个概念)

$tags = get_tags();
$tag_ids = wp_list_pluck( $tags, \'term_id\' );

$args = array(
   \'posts_per_page\' => 100,
   \'tag__not_in\' => $tag_ids
);

$query = get_posts( $args ); // Use which suits your best, get_posts or WP_Query
// $query = new WP_Query( $args );

// YOUR POST LOOP

结束