列出没有特定标签的帖子?

时间:2019-05-10 作者:BruceWayne

我试图列出没有特定标签的帖子。

目前,我正在一篇帖子中循环浏览每个标签,如果它不存在,请列出它。这是可行的,但如果有多个标记,它会多次列出相同的URL。

<?php
// the query
$wpb_all_query = new WP_Query(array(\'post_type\'=>\'post\', \'post_status\'=>\'publish\', \'posts_per_page\'=>-1)); ?>
<?php if ( $wpb_all_query->have_posts() ) : ?>
<ul>

    <!-- the loop -->
    <?php while ( $wpb_all_query->have_posts() ) : $wpb_all_query->the_post(); ?>
        <?php $post_tags = get_the_tags(); ?>
        <?php foreach ($post_tags as $tag) : ?>
            <?php if ($tag->name != "Tag1" and $tag->name != "Tag2" and $tag->name != "Tag3"): ?>
                <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
            <?php endif; ?>

       <?php endforeach; ?> 
       <?php endwhile; ?>
    <!-- end of the loop -->

</ul>
<?php wp_reset_postdata(); ?>
<?php endif; ?>
例如,带有标记的帖子Fun, 和Learning 将连续列出两次。我只想把这个列一次。

有没有办法快速检查帖子中的所有标签,而不是循环?

编辑:我尝试将所有标记添加到字符串中,并使用strpos() 但这似乎只检查了第一个条件,而不是第二个/第三个条件:

<?php while ( $wpb_all_query->have_posts() ) : $wpb_all_query->the_post(); ?>
   <?php $alltags = ""; ?>
    <?php $post_tags = get_the_tags(); ?>
    <?php foreach ($post_tags as $tag) : ?>
     <?php $alltags .= $tag->name . " "; ?>
     <?php endforeach; ?>
      <?php if ((strpos($alltags, "SCA") == false) and (strpos($alltags, "SCAA") == false) and (strpos($alltags, "Tea and Coffee") == false)): ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> - <?php echo $alltags; ?></li>
    <?php endif; ?>
   <?php endwhile; ?>

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

我相信您可以在原始WP\\U查询中使用Taxonomy Parameters. 然后您可以完全删除for循环。

$args = array(
    \'post_type\' => \'post\',
    \'posts_per_page\' =>-1,
    \'tax_query\' => array(
        array(
            \'taxonomy\' => \'post_tag\',
            \'field\'    => \'slug\',
            \'terms\'    => array(\'fun\',\'learning\'),
            \'operator\' => \'NOT IN\',
        ),
    ),
);
$wpb_all_query = new WP_Query( $args );