Пользовательский шаблон таксономии не работает с простым циклом. Несколько CPT, использующих одну и ту же таксономию


Мне нужна помощь с пользовательской таксономией WP и пользовательскими типами записей. До сих пор я так и не нашел рабочего решения. Пожалуйста, примите мои извинения, если у этого есть простое решение. Я старался изо всех сил, чтобы сначала найти решение везде.

Объяснение проблемы -

  1. У меня есть одна таксономия под названием "отдел".
  2. У меня есть 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? (в файле шаблона таксономии)

Мы будем очень признательны за любую помощь.

Author: Amit, 2016-08-20

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' ] );
    }
} );
 2
Author: Rarst, 2016-08-20 17:48:38

Я хотел бы поблагодарить @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" для всех типов сообщений.

Теперь, можем ли мы фильтровать сообщения по "типам сообщений"? Есть ли способ сделать это? Спасибо!

 1
Author: Amit, 2016-08-21 13:57:40

Пожалуйста, попробуйте это -

$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 и настраиваемого типа записи. И, наконец, мы сбрасываем запрос.

 0
Author: CodeMascot, 2016-08-21 04:52:02