Фильтрация wp_list_categories из одного пользовательского типа записи - PullRequest
0 голосов
/ 13 марта 2011

У меня есть 2 пользовательских типа записей под названием «проект» и «клиент», которые имеют общую таксономию под названием «сектор».

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>

Проблема заключается в том, что если у меня есть проект, связанный с «клубами», а клиент, связанный с «клубами», счетчик результатов показывает 2. Также на странице архива отображается2 поста - 1 для проекта и один для клиента.Но есть только один проект.

В основном меня интересует страница проекта, и я хотел бы отфильтровать результаты по типу поста «проект».Я просмотрел кодекс, и функция wp_list_categories, похоже, не принимает параметр для этого.

Кто-нибудь может помочь?Есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 01 июня 2011

У меня была похожая проблема. Я сделал это, клонировав функцию 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.

...