Как отобразить две отдельные архивы таксономий для двух типов записей, которые используют одну общую таксономию?

Вопрос или проблема

Как отобразить две отдельные архивы таксономий для двух типов записей, которые используют одну общую таксономию?

У меня есть нестандартный тип контента «продукты», который использует таксономию категорий с записями. Мы используем записи для обсуждения и обзора продуктов. Идея состоит в том, чтобы иметь два отдельных URL:

  • /discussion/category/term/ : Отображает список записей, относящихся к конкретному термину, с областью «связанные продукты», извлекаемой из того же термина
  • /products/category/term/ : Отображает список продуктов, относящихся к этому термину, с областью «связанные обсуждения», извлекаемой из того же термина

Я могу использовать стандартные шаблоны категории/архива с постоянной ссылкой для записей, и первый вариант решается по умолчанию. Но поскольку каждая таксономия имеет только один набор шаблонов, как я могу добиться второго?

Указанные выше URL являются примерами, и все типы архивов, в идеале, должны работать с обычными структурами перманентных ссылок после первоначальной части/слага.

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

Я также знаю, как использовать get_query_var(‘post_type’), чтобы различать два типа записей, но это не решает вопрос отдельных URL.

Любая помощь будет очень ценна!

Согласно WordPress Codex

archive-{post_type}.php

Таким образом, в вашем случае (в зависимости от вашего наименования):

archive-products.php

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

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

Пример псевдокода (в archive-products.php):

$tax = get_query_var( 'taxonomy' );
$term = get_query_var( 'term' );
if ($tax == 'your_taxonomy') {
    get_template_part('my_slug', 'my_name');
} else {
    // получить часть шаблона по умолчанию...
}

Ответ или решение

Для реализации двух отдельных архивов таксономий для двух типов постов, использующих общую таксономию, вам нужно создать специальную логику в вашей теме WordPress. Ваша задача состоит в том, чтобы разделить вывод постов и продуктов на основе одной и той же таксономии, используя некоторые пользовательские шаблоны. Ниже приведены шаги по реализации этого решения.

Шаг 1: Создайте пользовательские шаблоны архивов

  1. Создание archive-products.php:
    Создайте файл archive-products.php в директории вашей темы. Этот шаблон будет отвечать за отображение всех продуктов с конкретной категорией.

    <?php get_header(); ?>
    
    <h1><?php single_term_title(); ?></h1>
    
    <?php if (have_posts()) : ?>
       <ul>
           <?php while (have_posts()) : the_post(); ?>
               <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
           <?php endwhile; ?>
       </ul>
    <?php else : ?>
       <p><?php _e('Нет продуктов для отображения.'); ?></p>
    <?php endif; ?>
    
    <h2>Связанные обсуждения</h2>
    <?php
    // Получаем связанные посты
    $term = get_queried_object();
    $related_posts = new WP_Query(array(
       'post_type' => 'post',
       'tax_query' => array(
           array(
               'taxonomy' => 'category',
               'field' => 'slug',
               'terms' => $term->slug,
           ),
       ),
    ));
    
    if ($related_posts->have_posts()) : ?>
       <ul>
           <?php while ($related_posts->have_posts()) : $related_posts->the_post(); ?>
               <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
           <?php endwhile; ?>
       </ul>
    <?php else : ?>
       <p><?php _e('Нет обсуждений для отображения.'); ?></p>
    <?php endif; ?>
    
    <?php get_footer(); ?>
  2. Создание archive.php или taxonomy.php:
    Если вы хотите, чтобы архивы постов отображались на стандартном шаблоне для категорий, вы можете использовать archive.php или taxonomy.php в зависимости от ваших потребностей. Обычно taxonomy.php предпочтительнее, так как он предоставляет больше возможностей для настройки.

    <?php get_header(); ?>
    
    <h1><?php single_term_title(); ?></h1>
    
    <?php if (have_posts()) : ?>
       <ul>
           <?php while (have_posts()) : the_post(); ?>
               <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
           <?php endwhile; ?>
       </ul>
    <?php else : ?>
       <p><?php _e('Нет обсуждений для отображения.'); ?></p>
    <?php endif; ?>
    
    <h2>Связанные продукты</h2>
    <?php
    // Получаем связанные продукты
    $term = get_queried_object();
    $related_products = new WP_Query(array(
       'post_type' => 'products',
       'tax_query' => array(
           array(
               'taxonomy' => 'category',
               'field' => 'slug',
               'terms' => $term->slug,
           ),
       ),
    ));
    
    if ($related_products->have_posts()) : ?>
       <ul>
           <?php while ($related_products->have_posts()) : $related_products->the_post(); ?>
               <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
           <?php endwhile; ?>
       </ul>
    <?php else : ?>
       <p><?php _e('Нет продуктов для отображения.'); ?></p>
    <?php endif; ?>
    
    <?php get_footer(); ?>

Шаг 2: Настройка постоянных ссылок

Убедитесь, что у вас правильно настроены постоянные ссылки в разделе "Настройки" → "Постоянные ссылки". Это важно для того, чтобы WordPress правильно обрабатывал новые URL-адреса, такие как /discussion/category/term/ и /products/category/term/.

Шаг 3: Проверка и отладка

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

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...