我有两种职位类型(A型和B型)和两种分类法(tax-1和tax-2),都分配给每种职位类型。这意味着A类帖子可以包含tax-1和tax-2中的术语,而B类帖子也可以包含tax-1和tax-2中的术语。
我希望我的WP\\u查询输出来自type-A的所有包含tax-1某些术语的帖子。但我不想输出包含这些tax-1术语的B类帖子,不幸的是,我的WP\\U查询会这样做。同样的情况也应适用于tax-2,即只有包含tax-2条款的B类职位才应输出。
我已经尝试为此创建两个$参数,但我没有成功合并这两个$参数。
function my_function($args) {
global $post;
$args = array(
\'post_type\' => array(\'type-A\',\'type-B\'),
\'tax_query\' => array(
\'relation\' => \'OR\',
array(
\'taxonomy\' => \'tax-1\',
\'field\' => \'term_id\',
\'terms\' => array(11, 12, 13),
),
array(
\'taxonomy\' => \'tax-2\',
\'field\' => \'term_id\',
\'terms\' => array(21, 22, 23),
),
),
);
return $args;
}
最合适的回答,由SO网友:admcfajn 整理而成
你可以使用pre_get_posts 要根据帖子类型有条件地添加tax\\u查询,下面是一个简单的示例。
<?php
function wpse_377928( $the_query ){
$post_type = $the_query->get(\'post_type\');
if ( \'type_a\' === $post_type ) {
$tax_query = [
[
\'taxonomy\' => \'tax-1\',
\'field\' => \'term_id\',
\'terms\' => array(11, 12, 13),
]
];
}
elseif ( \'type_b\' === $post_type ) {
$tax_query = [
[
\'taxonomy\' => \'tax-2\',
\'field\' => \'term_id\',
\'terms\' => array(21, 22, 23),
]
];
}
if ( !empty( $tax_query ) ) {
$the_query->set( \'tax_query\', $tax_query );
}
}
add_action(\'pre_get_posts\', \'wpse_377928\');