Как задать шаблон для таксономий?

Ссылка скопирована
PHP
1 ответ

есть тип записей 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' );

Дополнительно:

Что значит "пройдя по рубрикам"?

  • Refguser, ну есть тип записи cases
    в нем зарегистрированы таксономии
    в админке это рубрики

    Как задать шаблон для таксономий?

    если зайти в тип записей с всеми постами в ней, это будет site.com/cases - то все ок, так как подхватывает шаблон archive-cases.php
    но если перейти в рубрику допусти teach это будет site.com/categoty/teach
    то тянет archive.php
    а хотелось бы один шаблон прикрутить ко всему этому
    т.к типы записей будут добавляться, что бы потом голову не сломить

  • rootnoroot, убери custom_cases_template. Шаблоны сами подтягиваются в соответствии с иерархией.
  • Ответы:

    Попробуйте сначала регистрировать таксономию, потом тип записи
    И при регистрации типа записи укажите
    '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', ],

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Никита Орлов Ответ

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

    taxonomy-case_category.php

    taxonomy-case_category.php

    Если нужен шаблон для конкретного термина, например slug design:

    taxonomy-case_category-design.php

    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'],
    ]);

    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(); ?>

    <?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');
        }
    });

    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 сам выбирает записи текущего термина, а шаблон только оформляет список, заголовок, описание термина и карточки материалов.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно