我发现了这个问题:
Theres a way to use $query->set('tax_query' in pre_get_posts filter?
这似乎表明是的,您可以通过pre\\u get\\u posts()更改分类法归档上的分类法查询。所以我想出了
add_action(\'pre_get_posts\', \'kia_no_child_terms\' );
function kia_no_child_terms( $wp_query ) {
if( is_tax() ) {
$wp_query->tax_query->queries[0][\'include_children\'] = 0;
}
}
以及
add_action(\'pre_get_posts\', \'kia_no_child_terms\' );
function kia_no_child_terms( $wp_query ) {
if( is_tax() ) {
$tax_query = $wp_query->get( \'tax_query\' );
$tax_query->queries[0][\'include_children\'] = 0;
$wp_query->set( \'tax_query\', $tax_query );
}
}
要尝试将include\\u children参数设置为false。。。我能想到的几乎是这两者的每一个组合。然而,到目前为止,分类法存档仍然显示子术语中的项目
下面的测试似乎只是添加了额外的税务查询,而不是覆盖它们。。。这让我很困惑。
function dummy_test( $wp_query){
$tax_query = array(
\'relation\' => \'OR\',
array(
\'taxonomy\' => \'tax1\',
\'terms\' => array( \'term1\', \'term2\' ),
\'field\' => \'slug\',
),
array(
\'taxonomy\' => \'tax2\',
\'terms\' => array( \'term-a\', \'term-b\' ),
\'field\' => \'slug\',
),
);
$wp_query->set( \'tax_query\', $tax_query );
);
add_action(\'pre_get_posts\',\'dummy_test\');
设置是否应覆盖当前值?
最合适的回答,由SO网友:helgatheviking 整理而成
我无法将此与以下任何组合一起使用pre_get_posts
或parse_query
. 通过在创建查询对象后擦除它,我可以相对轻松地完成此操作。我不喜欢这样做,因为这样我就要运行两次查询,但我在试图“高效”方面已经束手无策了
function kia_no_child_taxonomies(){
if(is_tax()){
$args = array(
\'tax_query\' => array(
array(
\'taxonomy\' => get_query_var(\'taxonomy\'),
\'field\' => \'slug\',
\'terms\' => get_query_var(\'term\'),
\'include_children\' => FALSE
)
)
);
query_posts($args);
}
}
add_action(\'wp\',\'kia_no_child_taxonomies\');
因此,除非有人给出更好的答案,否则这是我目前为止找到的唯一方法。
EDIT:
根据@Tanner Moushey的回答,我终于能够将所有子术语从
pre_get_posts
钩子没有低效的双重查询。
function kia_no_child_taxonomies( $query ) {
if( is_tax() ):
$tax_obj = $query->get_queried_object();
$tax_query = array(
\'taxonomy\' => $tax_obj->taxonomy,
\'field\' => \'slug\',
\'terms\' => $tax_obj->slug,
\'include_children\' => FALSE
);
$query->tax_query->queries[] = $tax_query;
$query->query_vars[\'tax_query\'] = $query->tax_query->queries;
endif;
}
add_action( \'pre_get_posts\', \'kia_no_child_taxonomies\' );