- 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