问题描述
有一组标签,其中至少有 3 个这些标签的帖子应该匹配。
说有 {foo,bar,chocolate,mango,hammock,leaf} 的标签
我想找到所有这些标签中至少有 3 个的帖子。
例如,标签 {foo,mango,vannilla,nuts,leaf} 的帖子将匹配它,因为它具有 {foo,mango,leaf},因此至少需要 3 个标签。所以它将在匹配的帖子的列表中。
有没有一个简单的方法来做到这一点,没有通过所有的帖子做多个循环?
最佳解决方案
下面的答案是简化的,可以扩展,以检查在输出列表之前是否有任何帖子有 3 个匹配的标签。使用一个查询,假设您至少有一个帖子与 3 个匹配的标签:
//List of tag slugs
$tags = array('foo', 'bar', 'chocolate', 'mango', 'hammock', 'leaf');
$args = array(
'tag_slug__in' => $tags
//Add other arguments here
);
// This query contains posts with at least one matching tag
$tagged_posts = new WP_Query($args);
echo '<ul>';
while ( $tagged_posts->have_posts() ) : $tagged_posts->the_post();
// Check each single post for up to 3 matching tags and output <li>
$tag_count = 0;
$tag_min_match = 3;
foreach ( $tags as $tag ) {
if ( has_tag( $tag ) && $tag_count < $tag_min_match ) {
$tag_count ++;
}
}
if ($tag_count == $tag_min_match) {
//Echo list style here
echo '<li><a href="'. get_permalink() .'" title="'. get_the_title() .'">'. get_the_title() .'</a></li>';
}
endwhile;
wp_reset_query();
echo '</ul>';
编辑:调整变量 $tag_min_match
将设置匹配次数。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。