从一个自定义帖子类型中过滤wp_list_categories

时间:2011-03-13 04:16:25

标签: wordpress taxonomy wp-list-categories

我有两个名为'project'和'client'的自定义帖子类型,它们共享一个名为'sector'的分类。

if (!is_taxonomy('sector')) {
        register_taxonomy(
        'sector', array('project', 'client'), array(
        'hierarchical' => true,
        'label' => 'Sector',
        'query_var' => true,
        'rewrite' => array( 'slug' => 'sector' ),
        'with_front' => false
        ) );

        wp_insert_term('Health', 'sector');
        wp_insert_term('Clubs', 'sector');
        wp_insert_term('Commercial', 'sector');     
    }

我创建了一个带有侧栏导航的分类法归档模板,该导航列表使用以下命令列出了我的分类法归档的链接:

//list terms in a given taxonomy using wp_list_categories 

    $orderby      = 'name'; 
    $show_count   = 1;      // 1 for yes, 0 for no
    $pad_counts   = 0;      // 1 for yes, 0 for no
    $hierarchical = 0;      // 1 for yes, 0 for no
    $show_option_none='';
    $title        = '';

    $args_sector = array(
      'taxonomy'     => 'sector',
      'orderby'      => $orderby,
      'show_count'   => $show_count,
      'pad_counts'   => $pad_counts,
      'hierarchical' => $hierarchical, 
      'title_li'     => $title
    );


<ul id="sideNav" class="rightSubMenu">   
      <h3 class="rightSubNav">SECTOR</h3>
      <ul id="sideNav" class="rightSubMenu">
        <?php wp_list_categories( $args_sector ); ?>
      </ul>

</ul>

问题是如果我有一个链接到'club'的项目和一个链接到'club'的客户端,输出计数显示2.此外,存档页面显示2个帖子 - 1个用于项目,1个用于客户端。但是只有一个项目。

我主要关注项目页面,并希望按我的“项目”帖子类型过滤结果。我查看了codex,wp_list_categories函数似乎不接受参数来执行此操作。

有人可以帮忙吗?有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

我遇到过类似的问题。我这样做是通过克隆wp_list_categories函数,给它一个不同的名称并在行后输入这段代码:$ categories = get_categories($ r):

 foreach ($categories as $key => $category){
        $temp = array ( 'post_type'=>$r['type'], 'tax_query' => array(
            array (
                'taxonomy' => $category->taxonomy,
                'field' => 'slug',
                'terms' => $category->slug
            )

        )
            );
        $pauli = new wp_query($temp);
        if($pauli->post_count==0){
            unset($categories[$key]);
        }
    }

正如您所看到的,它会删除不具有您需要的任何帖子类型的类别,然后按照wp_list_categories正常运行来继续该过程。