将子任期帖子从父任期档案中排除

时间:2012-06-14 作者:Sam

我已经创建了一个自定义的分层分类单元,当查看分类归档页面时,我只想显示分配给该术语的帖子。这在子术语页面上运行良好,但父术语页面显示分配给它们的帖子和任何子术语。

我找到了一个solution 它通过在循环开始后插入以下链接来解决类别的此问题:

<? if ((is_category()) && in_category($wp_query->get_queried_object_id())) { ?>
但我还没有找到一个适用于自定义分类法的类似解决方案。

我还尝试了:

function exclude_children($wp_query) {
    if ( isset ( $wp_query->query_vars[\'custom_taxomony\'] ) ) {
        $wp_query->set(\'tax_query\', array(\'include_children\' => false));
    }
}  
add_filter(\'pre_get_posts\', \'exclude_children\'); 
但这似乎没有任何效果。所以问题是,我该怎么做?

3 个回复
SO网友:Sam

好吧,我找到了答案。问题的一部分是提到的缺少数组@goto10,另一部分是tax\\u查询需要参数。以下是我目前使用的内容:

function exclude_children($wp_query) {
    if ( isset ( $wp_query->query_vars[\'custom_taxomony\'] ) ) {
        $wp_query->set(\'tax_query\', array( array (
            \'taxonomy\' => \'custom_taxonomy\',
            \'field\' => \'slug\',
            \'terms\' => $wp_query->query_vars[\'custom_taxonomy\'],
            \'include_children\' => false
        ) )
    }
}  
add_filter(\'pre_get_posts\', \'exclude_children\'); 
我更喜欢使用变量taxonomy => custom_taxonomy 而不是硬编码中的值,因为这似乎是一个更可重用的解决方案,但我不知道如何从WP\\u Tax\\u查询对象中提取值。

重要的是taxonomy, field, 和terms 都是必需的值,但这在法典中并不清楚。

SO网友:christian

空的$taxonomy\\u slugs数组将排除所有分类法存档的子级。

function taxonomy_archive_exclude_children($query){
   $taxonomy_slugs = [\'product_category\', \'application_category\'];
   if($query->is_main_query() && is_tax($taxonomy_slugs)){
      foreach($query->tax_query->queries as &$tax_query_item){
        if(empty($taxonomy_slugs) || in_array($tax_query_item[\'taxonomy\'], $taxonomy_slugs)){
            $tax_query_item[\'include_children\'] = 0;
        }
      }
   }
 }
 add_action(\'parse_tax_query\', \'taxonomy_archive_exclude_children\');

SO网友:jimmyahughes

我使用query\\u posts()来实现这一点:

$args = array(
    \'post_type\' => \'custom_post_type\',
    \'posts_per_page\' => -1,
    \'post_status\' => \'publish\',
    \'paged\' => ( get_query_var(\'paged\') ? get_query_var(\'paged\') : 1), // Required if using pagination
    \'tax_query\' => array(
        array(
            \'taxonomy\' => \'custom_taxonomy\',
            \'field\' => \'slug\',
            \'terms\' => $term,
            \'include_children\' => false
        )
    )
);

query_posts( $args );
然后你的循环。。。

if ( have_posts() ) :  while ( have_posts() ) : the_post();

    // Your loopy stuff

endwhile;

// Include your pagination ...

the_posts_pagination(); // Or whatever you prefer

endif; wp_reset_query();
正如@山姆所说,taxonomy, field, 和terms 都是必需的tax_query() (这把我绊倒了)。

结束

相关推荐