我试图列出没有特定标签的帖子。
目前,我正在一篇帖子中循环浏览每个标签,如果它不存在,请列出它。这是可行的,但如果有多个标记,它会多次列出相同的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; ?>
最合适的回答,由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 );