隐藏父术语页面上的子术语帖子

时间:2014-11-27 作者:Jack Lee

我已经创建了一个自定义帖子“公司”和自定义类别“公司类别”。我在这里有一个问题,我想在主类别中隐藏子类别帖子。

例如:

  • 主要类别“第一”
    • 子类别“第二”
      我创建了两个帖子“Fname”和“Sname”。“Fname”分配给第一类,“Sname”分配给第二类。我不想在第一类中显示“Sname”,但只想在第一类中显示“Fname”。

      这可能吗?

      我找到了一个插件解决方案,Just One Category,但它们都是用于普通帖子类型,而不是自定义帖子类型。

      我尝试如下编辑代码:

      $q_args = array(
          \'paged\' => $glocal_search_pageds,
          \'post_type\' => array(\'company\'),
          \'s\' => $s,
          \'company_category\' => $company_category,
          \'posts_per_page\' => $companyprp,
          \'orderby\' => $orderby,
          \'order\' => $order,
          \'tax_query\' => array(
                array(
                    \'include_children\' => false
                )
            )
      );
      

1 个回复
最合适的回答,由SO网友:cybmeta 整理而成

我认为最好的解决办法是pre_get_posts 行动挂钩。首先,检查我们是否在自定义分类法的存档中,然后设置include_childrenfalse 对于tax_query argument 查询的。

add_action( \'pre_get_posts\', \'cyb_pre_get_posts\' );
function cyb_pre_get_posts( $query ) {
    //Assuming the slug of the custom taxonomy is company-category
    //change it with the correct value if needed
    if( $query->is_tax( \'company-category\' ) && $query->is_main_query() && !is_admin() ) {
        $tax_query = array(
            array(
                \'taxonomy\'         => \'company-category\',
                \'terms\'            => $query->get( \'company-category\' ),
                \'include_children\' => false
        );
        $query->set( \'tax_query\', $tax_query );
    }
}
另一种似乎更好的方法answer 并适用于自定义分类法,而不是核心类别分类法):

add_filter( \'parse_tax_query\', \'cyb_do_not_include_children_in_company_category_archive\' );
function cyb_do_not_include_children_in_company_category_archive( $query ) {
    if ( 
        ! is_admin() 
        && $query->is_main_query()
        && $query->is_tax( \'company-category\' )
    ) {
        $query->tax_query->queries[0][\'include_children\'] = 0;
    }
}
有关自定义查询和辅助循环(请参见WP_Query):

 $args = array(
             //Rest of you args go here
             \'tax_query\' => array(
                  array(
                      \'include_children\' => false
                  )
              )
          );

 $query = new WP_Query( $args );

结束

相关推荐

隐藏父术语页面上的子术语帖子 - 小码农CODE - 行之有效找到问题解决它

隐藏父术语页面上的子术语帖子

时间:2014-11-27 作者:Jack Lee

我已经创建了一个自定义帖子“公司”和自定义类别“公司类别”。我在这里有一个问题,我想在主类别中隐藏子类别帖子。

例如:

  • 主要类别“第一”
    • 子类别“第二”
      我创建了两个帖子“Fname”和“Sname”。“Fname”分配给第一类,“Sname”分配给第二类。我不想在第一类中显示“Sname”,但只想在第一类中显示“Fname”。

      这可能吗?

      我找到了一个插件解决方案,Just One Category,但它们都是用于普通帖子类型,而不是自定义帖子类型。

      我尝试如下编辑代码:

      $q_args = array(
          \'paged\' => $glocal_search_pageds,
          \'post_type\' => array(\'company\'),
          \'s\' => $s,
          \'company_category\' => $company_category,
          \'posts_per_page\' => $companyprp,
          \'orderby\' => $orderby,
          \'order\' => $order,
          \'tax_query\' => array(
                array(
                    \'include_children\' => false
                )
            )
      );
      

1 个回复
最合适的回答,由SO网友:cybmeta 整理而成

我认为最好的解决办法是pre_get_posts 行动挂钩。首先,检查我们是否在自定义分类法的存档中,然后设置include_childrenfalse 对于tax_query argument 查询的。

add_action( \'pre_get_posts\', \'cyb_pre_get_posts\' );
function cyb_pre_get_posts( $query ) {
    //Assuming the slug of the custom taxonomy is company-category
    //change it with the correct value if needed
    if( $query->is_tax( \'company-category\' ) && $query->is_main_query() && !is_admin() ) {
        $tax_query = array(
            array(
                \'taxonomy\'         => \'company-category\',
                \'terms\'            => $query->get( \'company-category\' ),
                \'include_children\' => false
        );
        $query->set( \'tax_query\', $tax_query );
    }
}
另一种似乎更好的方法answer 并适用于自定义分类法,而不是核心类别分类法):

add_filter( \'parse_tax_query\', \'cyb_do_not_include_children_in_company_category_archive\' );
function cyb_do_not_include_children_in_company_category_archive( $query ) {
    if ( 
        ! is_admin() 
        && $query->is_main_query()
        && $query->is_tax( \'company-category\' )
    ) {
        $query->tax_query->queries[0][\'include_children\'] = 0;
    }
}
有关自定义查询和辅助循环(请参见WP_Query):

 $args = array(
             //Rest of you args go here
             \'tax_query\' => array(
                  array(
                      \'include_children\' => false
                  )
              )
          );

 $query = new WP_Query( $args );

相关推荐