法典中有almost exactly what you are asking:
$args = array(
\'post_type\' => \'post\',
\'tax_query\' => array(
\'relation\' => \'AND\',
array(
\'taxonomy\' => \'movie_genre\',
\'field\' => \'slug\',
\'terms\' => array( \'action\', \'comedy\' )
),
array(
\'taxonomy\' => \'actor\',
\'field\' => \'id\',
\'terms\' => array( 103, 115, 206 ),
\'operator\' => \'NOT IN\'
)
)
);
$query = new WP_Query( $args );
您只需删除几个不需要的部分,当然还要更改
post_type
和分类详细信息,以适合您的数据。
$args = array(
\'post_type\' => \'post\',
\'tax_query\' => array(
array(
\'taxonomy\' => \'post_tag\',
\'field\' => \'id\',
\'terms\' => array( 103, 115, 206 ), // change these
\'operator\' => \'NOT IN\'
)
)
);
$query = new WP_Query( $args );
问题中提供的最小细节是我所能做到的。
根据问题编辑中的新信息:
这个\'tag\' => $rel_tagnames,
您使用的模式是deprecated. 您应该使用tax_query
如上所述。因为您已经包含了要搜索的标记列表,所以不需要排除任何标记。当您包含特定标记时,其他标记将被排除在外。所以你想要的是:
if ($rel_tags) {
$relatedargs = array(
\'ignore_sticky_posts\' => 1,
\'post__not_in\' => array($id),
\'showposts\' => $relatednumber,
\'orderby\' => \'rand\'
);
// Get list of tag names and set arguments for loop
foreach($rel_tags as $rel_tag) {
// exclude some tags
$excluded_tags = array (1,2,3);
if (in_array($rel_tag->term_id,$excluded_tags)) continue;
$rel_tagnames[] = $rel_tag->term_id;
}
$relatedargs[\'tax_query\'] = array(
array(
\'taxonomy\' => \'post_tag\',
\'field\' => \'id\',
\'terms\' => $rel_tagnames,
)
)
}
// the rest of your code
我把它改成了
ID
s而不是slug。搜索这些可能比搜索蛞蝓更有效,尽管我还没有对其进行基准测试,并将其转换为
tax_query
. 构建“包含”列表时,会排除标记,而不是在查询本身中尝试这样做。
为什么要设置函数globals
而不仅仅是return
ing数据?