Подключение шаблона для таксономии пользовательского типа записи
Пытаюсь расширить функционал за счет добавления произвольного типа записи, но к сожалению ничего не выходит. Надеюсь на ваше помощь.
На сайт добавил произвольный тип записи (События) и две таксономии к нему (рубрики: "Города" и "Календари"). Все файлы вынес в отдельную категорию 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, т.е. шаблон для отображения одного события).
Предполагаю, что так:
Спасибо, все работать стало корректно.
Ммм, скорее всего так:
ой, увидели А то я удалил потом часть коммента, так как быстро нашел ответ. Тайтл term выводиться
Ну она внутри делает как раз то, что я написал
понял, ещё раз спасибо