Можно ли запросить пользовательский тип поста по таксономии и термину И только для тех, которые имеют дочерний термин SPECIFI C? - PullRequest
0 голосов
/ 25 января 2020

Мне интересно, как я могу запросить следующий параметр:

taxonomy: projectcats

term: design

некоторые у сообщений есть дочерний термин: reference

Я пытался отобразить сообщение только с указанным c дочерним термином reference, но не знаю, как:

<?php 
        query_posts(array( 
            'post_type' => 'projects',
            'tax_query' => array(
                array (
                    'taxonomy' => 'projectcats',
                    'field' => 'slug',
                    'terms' => 'design',
                )
            ),
            'showposts' => 10
        ) );  
    ?>

1 Ответ

0 голосов
/ 25 января 2020

Посмотрите документацию для WP_Query() таксономических параметров . Вы можете использовать оператор relation => AND для запроса сообщений, которые имеют оба термина.

Также обратите внимание, что, если у вас нет особых условий c для изменения основного $wp_query объект, вы не должны использовать query_posts() и должны вместо этого использовать WP_Query() класс.

Если вам нужно использовать query_posts() , вы можете просто переместить массив tax_query в существующий код, но вот что вам нужно для начала:

$args = array(
    'post_type' => 'projects',
    'tax_query' => array(
        'relation' => 'AND',
        array(
            'taxonomy' => 'projectcats',
            'field' => 'slug',
            'terms' => 'design',
        ),
        array(
            'taxonomy' => 'projectcats',
            'field' => 'slug',
            'terms' => 'reference',
        )
    ),
    'posts_per_page' => 10
);

$project_query = new WP_Query( $args );

if( $project_query->have_posts() ){
    echo '<ul>';
        while( $the_query->have_posts() ){
            $project_query->the_post();
            echo '<li>' . get_the_title() . '</li>';
        }
    echo '</ul>';
} else {
    // no posts found
}

/* Restore original Post Data */
wp_reset_postdata();

Также после перечитывания вашего вопроса вы также сможете просто заменить 'terms' => 'design' с 'terms' => 'reference', нет? Вам не нужно запрашивать родительский термин, если он вам не нужен.

...