Налоговый запрос Wordpress Проблема - Как сделать запрос по таксономии, указав c родительский и дочерний термин? - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть пользовательский тип поста, называемый «ссылками» с таксономией «ссылки-кошки» Родительский и дочерний термины:

  • социальные сети
  • корпоративные коммуникации
  • события
  • компетенции
    • социальные медиа
    • события

Некоторые из некоторых дочерних терминов идентичны с родительскими терминами. Я хотел бы запросить все сообщения «социальных сетей» (но только детей «компетенций») - есть ли точный способ сделать это?

<?php 

$tagz = get_the_title(); // single post title as we are on a single page

    query_posts(array( 
        'post_type' => 'references',
        'tax_query' => array(
            'relation' => 'AND',
            array (
                'taxonomy' => 'references-cats',
                'field' => 'slug',
                'terms' => $tagz, // single post title corresponds with term
            ),
            array(
                'taxonomy' => 'references-cats',
                'field' => 'slug',
                'terms' => 'competences',
                'operator' => 'IN'
            )
        ),
        'showposts' => 7
    ) ); 

?>

Ответы [ 2 ]

0 голосов
/ 05 февраля 2020

Решение:

  1. Запрос всех сообщений с родительской таксономией. компетенции
  2. Затем, пока l oop, проверьте, есть ли у поста детская таксономия.

Пример:

$args_query = array(
    'post_type' => array('references'),
    'posts_per_page' => -1,
    'tax_query' => array(
        array(
            'taxonomy' => 'references-cats',
            'field' => 'term_id',
            'terms' => array(PARENT-TAXONOMY-ID),
        ),
    ),
);

$query = new WP_Query( $args_query );

if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();
        if (has_term($tagz, 'references-cats')) {
            // have $tags
        }
    }
}

wp_reset_postdata();

Также вы можете использовать приведенный ниже код вместо has_term ()

if (is_object_in_term( $post->ID, $taxonomy, $term )) {
    // code
}
0 голосов
/ 05 февраля 2020

Термины в WordPress имеют уникальные слагы, поэтому не имеет значения, если у вас есть 2 термина с одинаковыми именами, они будут иметь разные слагы. Таким образом, вам не нужно запрашивать ссылки как у родителя, так и у ребенка, так как вы все равно используете слаг для создания налогового запроса.

'tax_query' => array(
    array(
        'taxonomy' => 'references-cats',
        'field'    => 'slug',
        'terms'    => $slug
    )
)

Вышеупомянутого фрагмента кода достаточно для налогового запроса, вы следует просто использовать правильный slug для каждого термина таксономии в переменной $ slug.

LE:

Сопоставление вашего названия с термином «слаг» не является хорошим подходом. Вы можете легко достичь желаемого, создав метабокс на странице (с ACF или с пользовательским кодом), где вы выбираете категорию, из которой вы хотите отображать ссылки на каждой указанной c странице.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...