Шаблон таксономии для произвольного типа записей
Я создал произвольный тип записей portfolio
и конечно же taxonomy
.
function taxonomies_portfolio() {
$labels = array(
'name' => _x( 'Категории портфолио', 'taxonomy general name' ),
'singular_name' => _x( 'Категории портфолио', 'taxonomy singular name' ),
'search_items' => __( 'Поиск категорий портфолио' ),
'all_items' => __( 'Все категории портфолио' ),
'parent_item' => __( 'Родительская категория' ),
'parent_item_colon' => __( 'Родительская категория:' ),
'edit_item' => __( 'Редактировать категорию портфолио' ),
'update_item' => __( 'Обновить категорию портфолио' ),
'add_new_item' => __( 'Добавить категорию портфолио' ),
'new_item_name' => __( 'Новая категория портфолио' ),
'menu_name' => __( 'Категории' ),
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'rewrite' => true
);
register_taxonomy( 'portfolio_category', 'portfolio', $args );
}
add_action( 'init', 'taxonomies_portfolio', 0 );
Возможно ли создать 1 файл шаблона для отображения всех элементов одной категории? Я пытался создать taxonomy.php
, но безуспешно. Какое правильное название шаблона нужно использовать?
Согласно странице Codex WordPress о Иерархии шаблонов, вы создаёте файл шаблона с именем taxonomy-portfolio_category.php
. WordPress будет использовать его для отображения архива таксономии. Вы также можете использовать taxonomy-portfolio_category-{term_name}.php
для создания шаблонов под определённые термины в вашей таксономии.

Спасибо, Мэнни, но возможно ли использовать 1 шаблон для всех категорий вместо создания 3 шаблонов для 3 категорий?

Да, первая часть моего ответа: taxonomy-portfolio_category.php

Ок, спасибо Мэнни - но, к сожалению, это не сработало, нужно ли ещё что-то учитывать?

Я протестировал "taxonomy-portfolio_category.php", но вместо него отображается archive.php.

Вам не обязательно использовать стандартные шаблоны WordPress для управления различными шаблонами таксономий для одного и того же пользовательского типа записи.
Предположим, у вас есть: 1) пользовательский тип записи portfolio
с 1) таксономией pcat
и 3) терминами 'sites', 'apps' и 'design', созданными в этой таксономии (здесь показаны их слаги).
Случай 1: Вы можете использовать один и тот же шаблон для любой из этих таксономий pcat
. Просто используйте единый шаблон portfolio-single.php
с кодом, который отображает любую запись portfolio
единообразно.
Случай 2: Теперь предположим, что вы хотите показывать разные шаблоны для каждой записи portfolio
в зависимости от термина таксономии pcat
('sites', 'apps', 'design' или любой другой), назначенного этой записи.
Вы можете сделать это, по-прежнему используя тот же portfolio-single.php
, но с дополнительными частичными шаблонами для каждого термина pcat
.
Ваш portfolio-single.php
должен содержать этот код:
<?php
get_header();
// Здесь вы получаете конкретную запись типа `portfolio`.
global $post;
// Получаем массив терминов таксономии 'pcat', прикреплённых к записи,
// и берём слаг только первого термина (для краткости)
$txslug = get_the_terms($post, 'pcat')[0]->slug;
// Динамически формируем имя файла
$filename = get_template_directory() . '/partials/_portfolio-single-'.$txslug.'.php';
// Проверяем, существует ли файл и доступен ли для чтения
if (is_readable($filename)) {
// Случай, когда вы создали частичный подшаблон для конкретного термина `pcat`.
include get_template_directory() . '/partials/_portfolio-single-'.$txslug.'.php';
} else {
// Случай для всех остальных терминов таксономии `pcat`.
include get_template_directory() . '/partials/_portfolio-single-other.php';
}
get_footer();
Как видно из кода выше, вам нужно будет создать соответствующие частичные подшаблоны для каждого термина таксономии pcat
, которые вы назначаете своим записям, и которые будут управлять внешним видом этого термина.
Или/и создать файл /partials/portfolio-single-other.php
для обработки всех терминов, которые вы хотите отображать единообразно.
Это позволит сохранить ваши файлы темы хорошо организованными и без дополнительных затрат кода гибко управлять внешним видом различных терминов таксономии.
Примечание: Не забудьте повторно объявить global $post;
в начале ваших шаблонов '/partials/_portfolio-single-'.$txslug.'.php'
. Вы получите доступ к объекту пользовательского типа записи, который хотите отобразить, без дополнительных затрат.
