Как фильтровать произвольные типы записей по пользовательской таксономии категорий

14 окт. 2016 г., 19:47:04
Просмотры: 41.2K
Голосов: 4

Я использую WordPress 4.6.1 и пытаюсь разобраться, как фильтровать произвольные типы записей по таксономии категорий. Это очень удобно, так как нетехнические пользователи могут легко фильтровать записи произвольного типа по категориям в админ-панели.

Вот моя настройка...

  1. Я создаю дочернюю тему на основе tweentysixteen

  2. Я создал и зарегистрировал произвольный тип записи в файле functions.php дочерней темы следующим образом...

    add_action('init','prowp_register_my_post_types');
    function prowp_register_my_post_types() {
        register_post_type('products',
        array(
            'labels' => array (
                'name' => 'Products',
                'singular_name' => 'Product',
                'add_new' => 'Add New Product',
                'add_new_item' => 'Add New Product',
                'edit_item' => 'Edit this Product',
                'new_item' => 'New Product',
                'all_items' => 'All My Products'
            ),
            'public' => true,
            'show_ui' => true,
            'taxonomies'  => array ( 
                'category' 
            ),
            'supports' =>  array (
                'title', 
                'revisions', 
                'editor', 
                'thumbnail', 
                'page-attributes', 
                'custom-fields')
        ));
    }
    
  3. Теперь я использую зарегистрированный произвольный тип записи в файле index.php дочерней темы следующим образом:

    $pargs = array(
            'post_per_page' => '-1',
            'post_type' => 'products',
            'tax_query' => array(
                'taxonomy' => 'category',
                'field'    => 'slug',
                'terms' => 'Specials'
            )
        );
        $myProducts = new WP_Query($pargs);
        while ( $myProducts->have_posts() ) : $myProducts->the_post();
            get_template_part('template-parts/products',get_post_format());
        endwhile;
        rewind_posts();
        wp_reset_postdata();
    
  4. Наконец, в wp-admin я создал записи произвольного типа и назначил категорию "Specials" одной из моих записей. Остальные остались без категории. И все страницы опубликованы.

...Но почему-то мой браузер показывает все записи этого произвольного типа, а не только из категории Specials. Что я делаю не так?

0
Все ответы на вопрос 2
2

Вы делаете небольшую ошибку в вашем $pargs

Согласно документации

Важное примечание: tax_query принимает массив аргументов таксономического запроса (он принимает массив массивов). Также у вас указано "post_per_page" вместо "posts_per_page"

$pargs = array(
    'posts_per_page' => '-1',
    'post_type' => 'products',
    'tax_query' => array(
        array(
            'taxonomy' => 'category',
            'field'    => 'slug',
            'terms' => 'specials'
        )
    )
)
14 окт. 2016 г. 20:49:51
Комментарии

хаха — всегда находится какая-то невероятно простая вещь, которую упускаешь из виду! Огромное спасибо!!

klewis klewis
14 окт. 2016 г. 20:54:55

@blackhawk ... да, такое случается со всеми !! :)

Anish Anish
14 окт. 2016 г. 20:58:56
0

Вы можете попробовать следующий код:

$terms = wp_get_post_terms( $post->ID, array('category') );
$term_slugs = wp_list_pluck( $terms, 'slug' );    
$args = array(
        'post_per_page' => '-1',
        'post_type' => array( 'products' ), 
            'tax_query' => array(
                array(
                'taxonomy' => 'category',
                'field' => 'slug',
                'terms' => $term_slugs
                )  
    );


    $my_query = null;
    $my_query = new WP_Query($args);
14 окт. 2016 г. 20:44:42