Моя любимая часть иерархии шаблонов Wordpress - возможность быстро создавать файлы шаблонов для страниц с помощью slug, без необходимости редактировать страницу в Wordpress, чтобы выбрать шаблон.
В настоящее время мы можем сделать это:
PAGE- {пробкового} .php
Но я хотел бы иметь возможность сделать это:
одно- {post_type} - {пробкового} .php
Так, например, в типе сообщения под названием review
я мог бы создать шаблон для сообщения под названием «Мой большой обзор» вsingle-review-my-great-review.php
Кто-нибудь настраивал это раньше? single-{post_type}-{slug}.php
single-{post_type}-{slug}.php
, поэтому обновление до WP 3.4 - это еще один вариант.Ответы:
А) База в ядре
Как вы можете видеть в объяснении иерархии шаблонов Кодекса ,
single-{$post_type}.php
уже поддерживается.Б) Расширение основной иерархии
Теперь внутри есть несколько фильтров и крючков
/wp-includes/template-loader.php
.do_action('template_redirect');
apply_filters( 'template_include', $template )
get_query_template( $type, ... )
именем:"$type}_template"
Б.1) Как это работает
is_*()
.is_single() && $template = get_single_template()
get_query_template( $type, $templates )
, где$type
находитсяsingle
"{$type}_template"
фильтрВ) решение
Как мы только хотим расширить иерархию с одним шаблоном , который получает загружен до фактического
"single-{$object->post_type}.php"
шаблона, мы будем перехватывать иерархию и добавить новый шаблон к началу массива шаблонов.ПРИМЕЧАНИЕ: (Если вы хотите использовать что-то другое, чем слаг объектов по умолчанию), вам нужно будет настроить его в
$slug
соответствии с вашей структурой постоянных ссылок. Просто используйте все, что вам нужно от глобального(object) $post
.Билеты на Trac
Поскольку вышеприведенный подход в настоящее время не поддерживается (таким образом вы можете фильтровать только абсолютный путь), вот список билетов trac:
get_query_template()
источник
)
внутри фильтра. Исправлена. Может быть, вы хотите поменять тире подчеркиванием перед слагом внутри шаблона. Просто чтобы суффикс лучше выделялся при просмотре шаблонов.$templates
представляет собой массив. См. Основные функции в этом файле (без даты истечения срока действия). Убедитесь, что вы проверили это с установкой без плагинов и темой по умолчанию. Затем активируйте один за другим и посмотрите, не возникла ли ошибка.slug
доступно только для терминов и таксономий. Вы должны заменить$post->post_name
то, что соответствует вашей структуре постоянных ссылок. В настоящее время нет способа автоматически сделать это для всех случаев с извлечением и заменой пути в зависимости от вашей структуры perma и правил перезаписи. Ожидайте другое обновление.Следуя образу иерархии шаблонов я не вижу такой опции.
Вот как я бы это сделал:
Решение 1 (Лучшее на мой взгляд)
Создайте файл шаблона и свяжите его с рецензией
При добавлении php-файла шаблона в каталог вашей темы он будет отображаться как шаблон на странице редактирования вашего сообщения.
Решение 2
Вероятно, это может быть достигнуто с помощью
template_redirect
крючка.В файле functions.php:
РЕДАКТИРОВАТЬ
Добавлена
file_exists
проверкаисточник
exit;
там?exit()
необходим для предотвращения загрузки шаблона по умолчанию.Верхний ответ (от 4 лет назад) больше не работает, но кодекс WordPress имеет решение здесь :
источник
Использовать шаблоны страниц
Другой подход к масштабируемости - дублирование раскрывающейся функциональности шаблона страницы в
page
типе записи для вашего пользовательского типа записи.Код многократного использования
Дублирование в коде не является хорошей практикой. С течением времени это может привести к значительному увеличению объема кода, в то время как разработчику будет очень трудно управлять им. Вместо того, чтобы создавать шаблон для каждого отдельного слага, вам, скорее всего, понадобится шаблон «один ко многим», который можно использовать повторно, а не «один к одному» после шаблона.
Код
Это немного запоздалый ответ, но я подумал, что это было бы полезно, поскольку никто в Интернете не документировал этот подход, насколько я могу судить. Надеюсь, это поможет кому-то.
источник
В моем случае у меня есть пользовательские типы записей Альбом и Трек, связанные таксономией Альбома. Я хотел использовать разные одиночные шаблоны для записей альбома и трека в зависимости от их таксономии в альбоме.
Основываясь на ответе Кайзера выше, я написал этот код. Это работает хорошо.
Заметка. Мне не нужно было add_action ().
Теперь я могу создавать шаблоны с именами single-gregory-cpt-track-tax-serendipity.php и single-gregory-cpt-album-tax-serendipity.php, и WP будет использовать их автоматически; 'tax-serendipity' - это термин для первого термина таксономии Альбома.
для справки: хук фильтра 'single_template' объявлен в:
/wp-includes/theme.php:
get_query_template()
Спасибо Кайзер за пример кода.
Ура, Грегори
источник
Обновив код Brians, я обнаружил, что когда раскрывающийся список не использовался, опция шаблона «по умолчанию» сохранялась в wp_page_template, в результате чего он пытался найти шаблон с именем default. это изменение просто проверяет опцию «по умолчанию» при сохранении и вместо этого удаляет метаданные поста (полезно, если вы изменили опцию шаблона обратно на значение по умолчанию)
источник