Как создать шаблон для пользовательской таксономии в WordPress?
У меня есть следующий код, который я использовал для создания пользовательского типа записи и пользовательской таксономии.
В разделе продуктов я создал категории "мониторы" и "расходные материалы".
Затем я создал шаблон taxonomy-monitors.php - правильно ли он назван для категории мониторов? И какой URL мне нужно посетить, чтобы увидеть только категорию мониторов с использованием этого шаблона?
add_action( 'init', 'create_post_type' );
function create_post_type() {
register_post_type( 'products',
array(
'labels' => array(
'name' => __( 'Продукты' ),
'singular_name' => __( 'Продукт' )
),
'capability_type' => 'post',
'supports' => array('title','editor','comments'),
'public' => true,
'has_archive' => true,
'rewrite' => array( 'slug' => 'products' ),
)
);
}
function news_init() {
// Создаем новую таксономию
register_taxonomy(
'products',
'products',
array(
'label' => __( 'Категории продуктов' ),
'sort' => true,
'hierarchical' => true,
'args' => array( 'orderby' => 'term_order' ),
'rewrite' => array( 'slug' => 'products-category' )
)
);
}
add_action( 'init', 'news_init' );
ОБНОВЛЕНИЕ
Шаблоны
Смотрите Иерархию шаблонов для более подробного объяснения того, как WordPress выбирает шаблон.
Для термина таксономии slug
('monitors' в вашем примере) в таксономии taxonomy
(например, 'products') WordPress будет пытаться использовать следующие шаблоны (в таком порядке):
taxonomy-{taxonomy}-{slug}.php
taxonomy-{taxonomy}.php
taxonomy.php
archive.php
index.php
Для страницы термина таксономии 'monitors' WordPress будет использовать
taxonomy-products-monitors.php
если такой файл существует. Если его нет, то для этой таксономии он перейдет к
taxonomy-products.php
и так далее.
Постоянные ссылки
Следующий URL должен вести на страницу товаров 'monitors':
www.example.com?products=monitors
Вы также указали перезапись URL, поэтому, если правила перезаписи были обновлены и нет конфликтов, следующий URL также должен работать:
www.example.com/products-category/monitors

Хорошо, спасибо. У меня теперь есть шаблон taxonomy-products-monitors.php
, я перешел в раздел постоянных ссылок и нажал сохранить (это сбрасывает их, верно?), затем перешел на страницу http://www.neurosignsurgical.com/v2/products-category/monitors
, но она все еще показывает 404. Не могу понять, почему!

Да, это сбрасывает их. Учтите, что термины без записей, вероятно, будут показывать "ничего не найдено". Если первая ссылка работает нормально, то это проблема с постоянными ссылками. Вам следует использовать этот плагин для диагностики. Шаблон не влияет на 404 ошибку.

Я попробовал добавить новые продукты и отнести их к мониторам, первая ссылка выдала 404, как и вторая. Попробовал плагин (я обновлю вопрос скриншотом).

Ссылка: https://stackoverflow.com/questions/33888951/wordpress-custom-post-type-taxonomy-template
<?php
get_header();
// Действие перед оберткой контента и сайдбара
do_action('genesis_before_content_sidebar_wrap'); ?>
<div id="content-sidebar-wrap">
<?php do_action('genesis_before_content'); ?>
<div class="wrap">
<main class="content">
<?php
// Получаем slug и название текущей таксономии
$case_study_cat_slug = get_queried_object()->slug;
$case_study_cat_name = get_queried_object()->name;
?>
<h2><?php echo $case_study_cat_name; ?></h2>
<?php
// Аргументы для запроса записей типа "success_stories" с фильтрацией по таксономии
$al_tax_post_args = array(
'post_type' => 'success_stories', // Название вашего типа записи
'posts_per_page' => 999,
'order' => 'ASC',
'tax_query' => array(
array(
'taxonomy' => 'success_stories_category',
'field' => 'slug',
'terms' => $case_study_cat_slug
)
)
);
$al_tax_post_qry = new WP_Query($al_tax_post_args);
// Вывод записей
if($al_tax_post_qry->have_posts()) :
while($al_tax_post_qry->have_posts()) :
$al_tax_post_qry->the_post();
echo '<div class="post-excerpt">';
?>
<h2 class="entry-title" itemprop="headline"><a href="<?php the_permalink(); ?>" class="entry-title-link"><?php the_title(); ?></a></h2>
<div class="entry-content"> <?php echo excerpt(35); ?> </div>
</div>
<?php
endwhile;
endif;
?>
</main>
</div>
</div>
<?php
// Действие после обертки контента и сайдбара
do_action('genesis_after_content_sidebar_wrap');
get_footer();

Для этого добавьте следующий код в файл functions.php (находится в папке темы):
add_action( 'init', 'create_cw_hierarchical_taxonomy', 0 );
// создаем пользовательскую таксономию
function create_cw_hierarchical_taxonomy() {
$labels = array(
'name' => _x( 'Темы', 'название таксономии' ),
'singular_name' => _x( 'Тема', 'название таксономии в единственном числе' ),
'search_items' => __( 'Искать Темы' ),
'all_items' => __( 'Все Темы' ),
'parent_item' => __( 'Родительская Тема' ),
'parent_item_colon' => __( 'Родительская Тема:' ),
'edit_item' => __( 'Редактировать Тему' ),
'update_item' => __( 'Обновить Тему' ),
'add_new_item' => __( 'Добавить новую Тему' ),
'new_item_name' => __( 'Название новой Темы' ),
'menu_name' => __( 'Темы' ),
);
// регистрируем таксономию
register_taxonomy('topics',array('post'), array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'topic' ),
));
}
Я нашел это здесь, а также узнал как создать Неиерархическую Таксономию https://www.wpblog.com/create-custom-taxonomies-in-wordpress/
