WP_Query несколько типов записей и таксономий

Я хотел бы получить результаты по двум типам сообщений,

1) Публикуйте, только кикеры шоу-бизнеса 2) местные новости, показывайте все кикеры

Я пока:

$args=array(
'cat' => $my_category_id,
'post_status' => 'publish',
'posts_per_page' => 5,
'post_type' => array('post', 'local-news'),
'tax_query' => array(
      'relation' => 'OR',
   array(
     'taxonomy' => 'postkicker',
      'term' => 'business'
   ),
    array(
     'taxonomy' => 'impactkicker',
   ),
 ),
'orderby'    => 'date',
'order'      => 'DESC'
);

В настоящее время не отображаются оба типа сообщений, есть предложения? заранее спасибо


person Jose Salazar    schedule 29.09.2016    source источник
comment
Будет ли работать, если вы попробуете без запроса таксономии?   -  person mcon    schedule 30.09.2016
comment
Вам действительно нужен аргумент cat? У меня такое ощущение, что это противоречит вашему запросу по таксономии.   -  person The Maniac    schedule 30.09.2016
comment
@mcon На самом деле не работает без tax_query. Это правильный способ показать несколько типов post_types?   -  person Jose Salazar    schedule 30.09.2016
comment
Это правильный способ показать несколько post_types , но мы не знаем, как вы зарегистрировали тип сообщения local-news, поэтому может оказаться, что вы зарегистрировали его способом, который не упоминается как local-news, но кое-что еще. Покажите нам свой register_post_type код.   -  person random_user_name    schedule 30.09.2016


Ответы (1)


Вам необходимо убедиться, что вы также подключили свой cpt local-news к category таксономии, потому что вы пытаетесь выбирать по этой таксономии. Вот широко прокомментированный подход, который, я думаю, сделает то, что вам нужно. По крайней мере, если я четко уловил вашу идею. Вы можете изменить tax_query основное отношение на OR вместо AND для вывода элементов, если для них также не установлена ​​категория.

$args = array(
    // 'cat' => $my_category_id, // better  replace it with category in tax_query, see below.
    'post_status'    => 'publish',
    'posts_per_page' => 5,
    'post_type'      => array( 'post', 'local-news' ),
    'tax_query'      => array(
        'relation' => 'AND', // we set it to AND because we want all posts of this category i guess.
        array(
            'taxonomy' => 'category',
            'term'     => $my_category_id,
            'field'    => 'term_id',
            'operator' => 'IN', // just to be more explicit.
        ),
        array( // we create nested sub queries which will filter by other 2 taxonomies, which in turn has OR relation.
            'relation' => 'OR',
            array(
                'taxonomy' => 'postkicker',
                'field'    => 'slug',    // by default it's term_id and you are passing in a slug so set it explicitly.
                'term'     => 'business',
                'operator' => 'IN', // just to be more explicit.
            ),
            array(
                'taxonomy' => 'impactkicker',
                'field'    => 'slug',           // set these or not add rule for taxonomy at all.
                'term'     => 'your-term-slug', // same here.
                'operator' => 'IN', // it's a default value, but ou can set 'EXISTS' if you need to check if whatever term of such taxonomy is assigned.
            ),
        ),
    ),
    'orderby'        => 'date',
    'order'          => 'DESC',
);
person Mikhail.root    schedule 16.03.2020