Пользовательский шаблон таксономии не работает с простым циклом. Несколько CPT, использующих одну и ту же таксономию
Мне нужна помощь с пользовательской таксономией WP и пользовательскими типами записей. До сих пор я так и не нашел рабочего решения. Пожалуйста, примите мои извинения, если у этого есть простое решение. Я старался изо всех сил, чтобы сначала найти решение везде.
Объяснение проблемы -
- У меня есть одна таксономия под названием "отдел".
- У меня есть 3 CPT под названием "курс", "факультет", "библиотека".
Все 3 CPT будут использовать одну и ту же таксономию "отдел". У меня есть все успешно настроена и назначена таксономия "отдел" для всех 3 CPT.
Теперь я пытаюсь показать сообщения (все 3 сообщения CPT) по таксономии "отдел" термины (например, у меня есть термины "x", "y", "z" для таксономии "отдел"). У меня есть файл шаблона под названием "taxonomy-department.php ", который имеет простой цикл -
<?php if (have_posts()) : ?>
<ul>
<?php while (have_posts()) : the_post(); ?>
<li>
<?php the_title(); ?>
</li>
<?php endwhile; ?>
</ul>
<?php else : ?>
<p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
<?php endif; ?>
Приведенный выше цикл внутри шаблона таксономии не работает и не показывает сообщений. Просто перейду к другому заявлению. Я не уверен, как этого добиться этот.
Если я успешно получу сообщения (с вашей помощью), можно ли также фильтровать сообщения по CPT? (в файле шаблона таксономии)
Мы будем очень признательны за любую помощь.
3 answers
WP по умолчанию показывает обычные собственные записи в архивах. Он не будет автоматически выбирать , какие типы записей вы хотите разместить в своем архиве.
Вам придется настроить основной запрос, чтобы объяснить это ему, примерно так:
add_action( 'pre_get_posts', function ( WP_Query $query ) {
if ( $query->is_main_query() && $query->is_tax( 'department' ) ) {
$query->set( 'post_type', [ 'course', 'faculty', 'library' ] );
}
} );
Я хотел бы поблагодарить @Rarst за его вклад в ответ. Вот последний фрагмент кода -
add_action( 'pre_get_posts', 'my_tax_query' );
function my_tax_query($query){
if ( !is_admin() && $query->is_main_query() && $query->is_tax( 'department' ) ) {
$query->set( 'post_type', array( 'course', 'faculty', 'library' ) );
}
};
Поместите код внутрь файла functions.php
.
Это приведет к захвату всех сообщений (для страницы терминов) для всех типов сообщений, которые у вас есть.
Например - если ваша страница терминов http://domain-name.com/taxonomy/term1/
Вы получите все сообщения для "term1
" для всех типов сообщений.
Теперь, можем ли мы фильтровать сообщения по "типам сообщений"? Есть ли способ сделать это? Спасибо!
Пожалуйста, попробуйте это -
$post_type = array('course', 'faculty', 'library');
$terms = array( 'x-tax-slug', 'y-tax-slug', 'z-tax-slug' );
$args = array(
'post_type' => $post_type,
'tax_query' => array(
array(
'taxonomy' => 'department',
'field' => 'slug',
'terms' => $terms,
),
),
);
$query = new WP_Query( $args );
<?php if (have_posts()) : ?>
<ul>
<?php while ($query->have_posts()) : $query->the_post(); ?>
<li>
<?php the_title(); ?>
</li>
<?php endwhile; ?>
</ul>
<?php else : ?>
<p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
<?php endif; ?>
<?php wp_reset_postdata(); // reset the query ?>
Итак, здесь мы выполняем пользовательский запрос на основе вашей таксономии department
и настраиваемого типа записи. И, наконец, мы сбрасываем запрос.