Wp Query - Странное Поведение Архива Иерархической Таксономии

  • Автор темы Nataliedalf
  • Обновлено
  • 21, Oct 2024
  • #1

Справочная информация: у меня есть иерархическая таксономия, и я пытаюсь создать файл шаблона таксономии, в котором перечислены все дочерние термины со соответствующими сообщениями под каждым.

Пока что мне удалось добиться большей части этого, но я столкнулся с довольно странной ситуацией, на которую, я надеюсь, у кого-нибудь есть ответ.

Что я делаю, так это беру запрошенный термин и получаю дочерние термины для этого родителя. Затем он перебирает термины и выводит сообщения только с этим термином. Странно то, что он будет получать сообщения, когда термин является термином верхнего уровня, но если термин должен быть дочерним, тогда он не получит сообщений, хотя он получит любые дочерние термины этого термина.

Для иллюстрации моя таксономия может быть такой:

 
 
 
 
 
 $query_var_taxonomy = get_queried_object()->taxonomy;
$query_var_term = get_queried_object()->slug;
$queried_term = get_queried_object();
$args = array(

'taxonomy' => $query_var_taxonomy,

'hide_empty' => false,

'child_of' => $queried_term->term_id,
);
$terms = get_terms( $query_var_taxonomy, $args );

// If this is the last child then the above will return an empty array, 
// so we must populate it with the original queried object.

if ( empty( $terms ) ) 

$terms[] = $queried_term;

// Loop through each term
foreach ( $terms as $term ) {

//New query for each term, excluding term children

$args = array(

'post_type' => 'treatment',

'tax_query' => array( array(

'taxonomy' => $query_var_taxonomy,

'field' => 'slug',

'terms' => $term->slug,

'include_children' => false,

), ),

);

$query = new WP_Query( $args );

if ( $query->have_posts() ) {

echo "<h2>" . esc_html( $term->name ) . "</h2>";

while ( $query->have_posts() ) {

$query->the_post();

the_title( '<h3>', '</h3>' );

}

}
}
 

Приземлившись на первый семестр, я получаю:

<h3>Post 1</h3> <h3>Post 2</h3> <h2>Child A</h2> <h3>Child A's Post 1</h3>

Приземлившись на 2 семестр, я получаю:

<h2>Child A</h2> <h3>Child A's Post 1</h3>

Приземлившись на третий семестр, я получаю:

<h2>Child A</h2> <h3>Child A's Post 1</h3> <h3>Child A's Post 2</h3>

Таким образом, термины 1 и 2 я получаю именно то, что ожидаю, но термин 3 показывает только дочерний термин и его сообщение, но НЕ 2 сообщения, к которым применен сам термин 3.

Я ожидаю увидеть следующее:

<h3>Post 1</h3> <h3>Post 2</h3>

(Должен признаться, мне было трудно изложить это в письменной форме, надеюсь, вы понимаете, что я имею в виду!)

Мой код:

Term 1 - 2 posts Term 2 - 0 posts - Child A - 2 posts Term 3 - 2 posts - Child A - 1 post

Действительно странно то, что если термин является термином верхнего уровня (т. е. не имеет родительского элемента), то сообщения, принадлежащие этому термину, выводятся правильно, но если термин является дочерним термином или если термин верхнего уровня имеет другие дочерние термины, то отображаются только другие дочерние термины, но не сообщения этого термина.

Заранее спасибо.

#wp-query #taxonomy #archive-template

Nataliedalf


Рег
16 Feb, 2014

Тем
73

Постов
190

Баллов
585
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно