Подключение шаблона для таксономии пользовательского типа записи
Пытаюсь расширить функционал за счет добавления произвольного типа записи, но к сожалению ничего не выходит. Надеюсь на ваше помощь.
На сайт добавил произвольный тип записи (События) и две таксономии к нему (рубрики: "Города" и "Календари"). Все файлы вынес в отдельную категорию calendar/
Структура папки получилась такая:
- /calendar/init-type-events - инициализация пользовательского типа и таксономий к нему.
- /calendar/events.php - вывод всех созданных событий.
- /calendar/single-events.php — вывод одного события.
- /calendar/taxonomy/calendars.php — вывод таксономии "Календари".
- /calendar/taxonomy/cities.php — вывод таксономии города.
Сразу оговорю, что пробовал вариант с перемещением файлов в корень темы и переименования их согласно иерархии шаблонов. Но так, как в дальнейшем планирую вынести все это в отдельный плагин, хотелось бы понять как подключать шаблоны находящиеся не в корне папки.
Частично у меня это получилось, спасибо статье: "3 способа создать шаблон страницы" (а именно третьему способу). Но проблему, которую у меня не решить - это вывод шаблонов для таксономий.
Для наглядности закинул, что на данный момент получилось на сайт https://alexanderyurchenko.ru/events/
Приведу код инициализации пользовательского типа данных:
function init_events_post_type()
{
$labels_post_type_events = [
'name' => 'События',
'singular_name' => 'Событие',
'add_new' => 'Добавить событие',
'add_new_item' => 'Добавление события',
'edit_item' => 'Редактировать событие',
'new_item' => 'Новое событие',
'view_item' => 'Смотреть событие',
'search_items' => 'Искать события',
'not_found' => 'Не найдено',
'not_found_in_trash' => 'Не найдено в корзине',
'parent_item_colon' => '',
'menu_name' => 'События',
];
$args_post_type_events = [
'labels' => $labels_post_type_events,
'description' => 'args_post_type_events',
'public' => true,
'menu_icon' => 'dashicons-calendar-alt',
'menu_position' => 5,
'supports' => ['title', 'custom-fields'],
'taxonomies' => ['calendars', 'cities'],
];
register_post_type('events', $args_post_type_events);
// Регистрация таксономии "Календари"
$labels_taxonomy_calendars = [
'name' => 'Календари',
'singular_name' => 'Календарь',
'search_items' => 'Искать календарь',
'all_items' => 'Все календари',
'view_item ' => 'Смотреть календарь',
'parent_item' => 'Родительский календарь',
'parent_item_colon' => 'Родительский календарь:',
'edit_item' => 'Редактировать календарь',
'update_item' => 'Обновить календарь',
'add_new_item' => 'Добавить календрь',
'new_item_name' => 'Новое имя календаря',
'menu_name' => 'Календари'
];
$args_taxonomy_calendars = [
'labels' => $labels_taxonomy_calendars,
'description' => 'args_taxonomy_cities',
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_nav_menus' => true,
'show_tagcloud' => true,
'query_var' => true,
'hierarchical' => true,
'rewrite' => true
];
register_taxonomy('calendars', 'events', $args_taxonomy_calendars);
// Регистрация таксономии "Города"
$labels_taxonomy_cities = [
'name' => 'Страны',
'singular_name' => 'Страна',
'search_items' => 'Искать страну',
'all_items' => 'Все страны',
'view_item ' => 'Смотреть страну',
'parent_item' => 'Родительская страна',
'parent_item_colon' => 'Родительская страна:',
'edit_item' => 'Редактировать страну',
'update_item' => 'Обновить страну',
'add_new_item' => 'Добавить страну',
'new_item_name' => 'Новое имя страны',
'menu_name' => 'Страны'
];
$args_taxonomy_cities = [
'labels' => $labels_taxonomy_cities,
'description' => 'args_taxonomy_cities',
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_in_nav_menus' => true,
'show_tagcloud' => true,
'query_var' => true,
'hierarchical' => true,
'rewrite' => true
];
register_taxonomy('cities', 'events', $args_taxonomy_cities);
}
add_action('init', 'init_events_post_type');
А так же, частично работающее подключение шаблонов (в списка событий и одного события):
//// Шаблоны страниц через фильтр "template_include"
add_filter('template_include', 'my_template');
function my_template($template)
{
# шаблон для страниц для выводо одиночного события произвольного типа "events"
if (is_page('events')) {
return get_stylesheet_directory() . '/calendar/events.php';
}
# шаблон для страниц для выводо одиночного события произвольного типа "events"
global $post;
if ($post->post_type == 'events') {
return get_stylesheet_directory() . '/calendar/single-events.php';
}
# шаблон для страниц для выводо таксономий "Города"
global $query_var;
if (taxonomy_exists('cities') == true) {
return get_template_directory() . '/calendar/taxonomy/cities.php';
}
# шаблон для страниц для выводо таксономий "Календари"
if (taxonomy_exists('calendars') == true) {
return get_template_directory() . '/calendar/taxonomy/calendars.php';
}
return $template;
}
Последние две проверки, пробовал по всякому и через is_category (как было в статье), is_tax, is_tem - все безрезультатно 
Подскажите, что я делаю не так? Это основы и я понимаю, что если не пойму их буду делать полную хрень.
Забыл добавить, что в итоге у меня получилось.
• Подключение шаблона для списка событий - работает
• Подключение шаблона для одного события - работает
• Вывод шаблона для списка событий - не работает (при попытке перейти по любой из рубрик загружается single-eevnts.php, т.е. шаблон для отображения одного события).
Предполагаю, что так:
add_filter( 'template_include', 'my_template' ); function my_template( $template ) { # шаблон для страниц для вывод одиночного события произвольного типа "events" // или is_post_type_archive('events'), если бы сделал 'has_archive' => 'events' if ( is_page( 'events' ) ) { return get_stylesheet_directory() . '/calendar/events.php'; } # шаблон для страниц для выводо одиночного события произвольного типа "events" if ( is_singular( 'events' ) ) { return get_stylesheet_directory() . '/calendar/single-events.php'; } # шаблон для страниц для выводо таксономий "Города" if ( is_tax( 'cities' ) ) { return get_stylesheet_directory() . '/calendar/taxonomy/cities.php'; } # шаблон для страниц для выводо таксономий "Календари" if ( is_tax( 'calendars' ) ) { return get_stylesheet_directory() . '/calendar/taxonomy/calendars.php'; } return $template; }Спасибо, все работать стало корректно.
Ммм, скорее всего так:
ой, увидели
А то я удалил потом часть коммента, так как быстро нашел ответ. Тайтл term выводиться
Ну она внутри делает как раз то, что я написал
понял, ещё раз спасибо