如何更改分类档案主循环的税务查询?

时间:2014-04-20 作者:JPollock

我正在尝试更改主要WP\\U查询对象中税务查询中的一个参数,以便为我的分层分类法的存档创建存档视图。我的目标是更改税务查询中的一个参数,而保留其余参数不变。

我尝试获取当前查询,修改tax\\u查询数组,然后将其传递给set。

add_action( \'pre_get_posts\', \'slug_cpt_category_archives\' );
function slug_cpt_category_archives( $query ) {
    if ( is_tax( \'TAXONOMY NAME\') )  {
        $tax_query = $query->tax_query->queries;
        $tax_query[\'include_children\'] = 0;
        $query->set( \'tax_query\', $tax_query );
    }

}
当我添加此操作时,它不仅没有产生预期的效果,也没有包括子术语:

add_action( \'wp_head\', \'preh\' );
function preh( ) {
    global $wp_query;

    print_r( $wp_query->tax_query  );
}
我看到现在有两个tax\\u查询,都有[include_children] => 1

2 个回复
SO网友:gmazzap

@birgire answer 很好(我加1),但是$query->tax_query->queries 可以包含多个分类,并且$query->tax_query->queries[0] 可以是其他分类法的查询。

所以,如果你想设置\'include_children\' 若要在分类法“taxonomy NAME”上设置为false(请注意,这是一个布尔参数),则应确保按照正确的分类法操作:

add_action( \'pre_get_posts\', \'slug_cpt_category_archives\' );

function slug_cpt_category_archives( $query ) {
  if ( is_tax( \'TAXONOMY NAME\' ) )  {
    foreach ( $query->tax_query->queries as $i => $tax_query ) {
      if ( $tax_query[\'taxonomy\'] === \'TAXONOMY NAME\' ) {
         $query->tax_query->queries[$i][\'include_children\'] = false;
         // if you want to set \'include_children\' to false for all
         // taxonomies than remove following return
         return;
      }
    }
  }
}

SO网友:birgire

请尝试以下操作:

add_action( \'pre_get_posts\', function( $query) {
        if( is_tax( \'TAXONOMY NAME\') 
            && isset( $query->tax_query->queries[0][\'include_children\'] ) 
        ) $query->tax_query->queries[0][\'include_children\'] = 0;
});

结束