Как задать шаблон для таксономий?
есть тип записей cases
register_post_type( 'cases', array( 'label' => null, 'labels' => array( 'name' => 'Cases', 'singular_name' => 'Cases', 'add_new' => 'Add material', 'add_new_item' => 'Adding material', 'edit_item' => 'Editing material', 'new_item' => 'New material', 'view_item' => 'View material', 'search_items' => 'Search material', 'not_found' => 'Not found', 'not_found_in_trash' => 'Not found in cart', 'parent_item_colon' => '', 'menu_name' => 'Cases', ), 'description' => '', 'public' => true, 'show_in_menu' => true, 'show_in_rest' => true, 'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt', 'custom-fields', 'title', 'editor', 'comments', 'thumbnail' ), 'taxonomies' => array( 'case_category', 'post_tag' ), 'has_archive' => true, 'rewrite' => true, 'query_var' => true, )); // Регистрация таксономии register_taxonomy( 'case_category', 'cases', array( 'label' => __( 'Case Categories' ), 'rewrite' => array( 'slug' => 'case-category' ), 'hierarchical' => true, 'show_in_rest' => true, 'template' => array( 'archive-cases.php', 'archive-cases.php', ), ) ); |
register_post_type( 'cases', array( 'label' => null, 'labels' => array( 'name' => 'Cases', 'singular_name' => 'Cases', 'add_new' => 'Add material', 'add_new_item' => 'Adding material', 'edit_item' => 'Editing material', 'new_item' => 'New material', 'view_item' => 'View material', 'search_items' => 'Search material', 'not_found' => 'Not found', 'not_found_in_trash' => 'Not found in cart', 'parent_item_colon' => '', 'menu_name' => 'Cases', ), 'description' => '', 'public' => true, 'show_in_menu' => true, 'show_in_rest' => true, 'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt', 'custom-fields', 'title', 'editor', 'comments', 'thumbnail' ), 'taxonomies' => array( 'case_category', 'post_tag' ), 'has_archive' => true, 'rewrite' => true, 'query_var' => true, )); // Регистрация таксономии register_taxonomy( 'case_category', 'cases', array( 'label' => __( 'Case Categories' ), 'rewrite' => array( 'slug' => 'case-category' ), 'hierarchical' => true, 'show_in_rest' => true, 'template' => array( 'archive-cases.php', 'archive-cases.php', ), ) );
при переходе по /cases
все ок, цепляет шаблон archive-cases.php
но пройдя по рубрикам нифига не могу прицепить этот же шаблон
как его прикрутить?
function custom_cases_template( $template ) { if ( is_tax('case_category') && is_post_type_archive('cases') ) { return get_template_directory() . '/archive-cases.php'; } return $template; } add_filter( 'template_include', 'custom_cases_template' ); |
function custom_cases_template( $template ) { if ( is_tax('case_category') && is_post_type_archive('cases') ) { return get_template_directory() . '/archive-cases.php'; } return $template; } add_filter( 'template_include', 'custom_cases_template' );
function custom_cases_template( $template ) { if ( is_tax('case_category') && locate_template( array( 'archive-cases.php' ) ) !== '' ) { return get_template_directory() . '/archive-cases.php'; } elseif ( is_tax('case_category') ) { return get_template_directory() . '/archive-cases.php'; } return $template; } add_filter( 'template_include', 'custom_cases_template' ); |
function custom_cases_template( $template ) { if ( is_tax('case_category') && locate_template( array( 'archive-cases.php' ) ) !== '' ) { return get_template_directory() . '/archive-cases.php'; } elseif ( is_tax('case_category') ) { return get_template_directory() . '/archive-cases.php'; } return $template; } add_filter( 'template_include', 'custom_cases_template' );
Дополнительно:
Что значит "пройдя по рубрикам"?
в нем зарегистрированы таксономии
в админке это рубрики
если зайти в тип записей с всеми постами в ней, это будет site.com/cases - то все ок, так как подхватывает шаблон archive-cases.php
но если перейти в рубрику допусти teach это будет site.com/categoty/teach
то тянет archive.php
а хотелось бы один шаблон прикрутить ко всему этому
т.к типы записей будут добавляться, что бы потом голову не сломить
Ответы:
Попробуйте сначала регистрировать таксономию, потом тип записи
И при регистрации типа записи укажите
'hierarchical' => true,
Важно: после создания нового типа записи. Обязательно нужно зайти на страницу Настройки → Постоянные ссылки. Нужно это для того, чтобы правила ЧПУ были пересозданы и туда были добавлены правила нового типа записи.
register_post_type()
register_taxonomy()
- Не имеет значения в каком прядке регистрировать.
- Так же как и не имеет смысла заходить в постоянные ссылки. Все и так работает.
Не правильно просто брать и заставлять использовать шаблон. Есть логичная структура и лучше использовать ее. Для таксономии сделать шаблон taxonomy-case_category.php а для переиспользования контента вынести его в другие файлы и включить в оба шаблона.
Для таксономии:
'query_var' => true, 'has_archive' => true, 'show_in_rest' => true, 'rewrite' => [ 'slug' => 'cases', ], |
'query_var' => true, 'has_archive' => true, 'show_in_rest' => true, 'rewrite' => [ 'slug' => 'cases', ],
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос


Для шаблона произвольной таксономии WordPress использует стандартную иерархию файлов. Если таксономия называется
case_category, файл шаблона должен называться:taxonomy-case_category.php
Если нужен шаблон для конкретного термина, например slug
design:taxonomy-case_category-design.php
Если такого файла нет, WordPress пойдёт ниже по иерархии:
taxonomy.php, потомarchive.php, потомindex.php.При регистрации таксономии убедитесь, что она публичная и имеет rewrite:
register_taxonomy('case_category', ['cases'], [ 'label' => 'Case Categories', 'public' => true, 'hierarchical' => true, 'show_in_rest' => true, 'rewrite' => ['slug' => 'case-category'], ]);
После изменения rewrite обязательно пересохраните постоянные ссылки в админке или выполните flush rewrite rules один раз. Не делайте
flush_rewrite_rules()на каждом запросе.Внутри
taxonomy-case_category.phpможно использовать обычный цикл:<?php get_header(); ?> <h1><?php single_term_title(); ?></h1> <?php echo term_description(); ?> <?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?> <?php get_template_part('template-parts/case-card'); ?> <?php endwhile; ?> <?php endif; ?> <?php get_footer(); ?>
Если для таксономии нужно выводить только записи CPT
cases, обычно WordPress сам построит основной запрос правильно, если таксономия зарегистрирована для этого CPT. Если выводятся не те записи, проверьте параметрregister_taxonomy('case_category', ['cases'], ...)и публичность CPT.Для настройки количества записей на архиве таксономии не нужно создавать новый WP_Query в шаблоне. Лучше изменить основной запрос через
pre_get_posts:add_action('pre_get_posts', function ($query) { if (is_admin() || !$query->is_main_query()) { return; } if (is_tax('case_category')) { $query->set('posts_per_page', 12); $query->set('post_type', 'cases'); } });
Если шаблон не подхватывается, проверьте активную тему, точное имя таксономии, slug URL и Query Monitor. Частая ошибка — создать файл с неправильным именем или забыть flush постоянных ссылок после регистрации CPT/таксономии.
Файл шаблона кладите в активную тему или дочернюю тему. Если используется конструктор или кастомный плагин шаблонов, он может перехватывать вывод раньше темы, поэтому для проверки временно добавьте в файл простой текст и убедитесь, что он появился на странице термина. Так Вы быстро поймёте, проблема в имени файла или в том, что вывод полностью заменяет builder.
Не используйте
query_posts()в таком шаблоне. Он ломает основной запрос и часто создаёт проблемы с пагинацией. Правильная схема: WordPress сам выбирает записи текущего термина, а шаблон только оформляет список, заголовок, описание термина и карточки материалов.