Как я могу получить сообщения из таксономии в WordPress?

#php #wordpress

#php #wordpress

Вопрос:

Итак, у меня есть пользовательский тип с именем («knowledge_base»), который имеет таксономию с именем (‘section’), и один из них (‘dog bite’). Прямо сейчас я на example.com/section/dog-bite / и я пытаюсь показать сообщения, расположенные здесь. Это то, что у меня есть на данный момент, поэтому я не уверен, чего не хватает, но он просто отображает ВСЕ сообщения из всех разделов.

 $current = get_queried_object();

 $args = array(
        'post_type' => 'knowledge_base',
        'tax_query' => array(
            array(
             'taxonomy'  => 'section',
             'field'    => $current->slug,
             'terms'    => $current->name
             )
         )
       );
 // The Query
 $the_query = new WP_Query( $args );

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

Предполагается, что должно быть только 2 сообщения

Комментарии:

1. Работает ли это, если вы жестко закодируете field и terms ? Кроме того, вы пробовали вызывать var_dump, чтобы подтвердить, что $current->slug и $current->name являются ли значения, которые вы ожидаете?

2. Да, я только что попробовал это, но все еще показывает ВСЕ сообщения. Я загрузил скриншот i.stack.imgur.com/ISpkb.png

Ответ №1:

Проверьте этот код.

 $args = array(
    'post_type' => 'knowledge_base',
    'tax_query' => array(
        array(
            'taxonomy'  => 'section',
            'field'    => 'slug', // ‘term_id’, ‘name’, ‘slug’ or ‘term_taxonomy_id’
            'terms'    => $current->slug, // It's will be $term->slug
        )
    )
);
// The Query
$the_query = new WP_Query( $args );

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

Комментарии:

1. Я пытался, но он по-прежнему показывает ВСЕ сообщения. Вот скриншот i.stack.imgur.com/ISpkb.png

2. @TheAdvocates Вам нужно изменить свои аргументы, чтобы использовать 'field' => 'slug' , т.е. field должно быть слово 'slug' , а не слаг, который вы ищете. Код на вашем скриншоте показывает 'field' => 'dog-bite' . Покажите нам результат, когда вы измените его на этот, пожалуйста.