Как создавать отдельные шаблоны для страниц в WordPress
- 04.03.2020 15:27
- 1
- 433
Система WordPress является очень гибкой и легко позволяет реализовать любые дизайнерские прихоти. К примеру, если возникла необходимость назначить отдельным страницам свои шаблоны оформления, это легко можно реализовать. Причем для осуществления задуманного есть аж три способа.
В сегодняшнем материале мы разберем их все:
- Создание шаблона через подключение его в админке и с произвольным названием страницы (шаблон можно будет выбрать при публикации или редактировании статьи)
- Через файл с конкретным названием
- Через фильтр template_include (самый продвинутый)
Создание шаблона через подключение его в админке и с произвольным названием страницы
Смысл метода в том, что при выводе страницы Вордпресс формирует список файлов, которые содержат в себе специальный код. Таким образом, если создать отдельный файл, в котором прописать код, то шаблон появится в списке при редактировании страницы.
Директива Template Post Type отвечает за то, в каких таксономиях (типах страниц) будет доступен к установке созданный шаблон.
Как видите, я создал шаблон с название «Мой шаблон страницы. И теперь, при редактировании страницы, могу выбрать его. Если это сделать, отображение документа будет выполняться в соответствии с кодом, прописанным в шаблоне.
Такой подход является наиболее распространенным и имеет ряд преимуществ:
- Один раз создав шаблон, можно применять его сколько угодно к любым типам страниц.
- Можно вывести в отдельной категории только те страницы, которые работают на этом шаблоне.
В целом, я могу сделать отдельный шаблон для каждой рубрики своего блога и выбирать соответствующий набор инструкций при публикации поста.
Создание шаблона через файл с конкретным названием
Этот метод менее универсален, и подходит в тех случаях, когда требуется поменять шаблон вывода определенной страницы.
К примеру, если создать файл с именем page-about.php, и применить в нем измененный код, то страница с адресом site.ru/about будет выводиться в соответствии с ним.
А если нужно сделать такую манипуляцию с записью, то достаточно сделать файл single-about.php. В таком случае запись с адресом site.ru/about будет иметь измененный в соответствии с шаблоном внешний вид.
Данный способ позволяет создать разные шаблоны хоть для каждой страницы на сайте.
Также можно привязываться в ID постов, страниц. Это позволит альтернативному шаблону работать даже в том случае, когда адрес страницы был изменен.
К примеру, файл page-12.php будет работать со страницей с ID 12 вне зависимости от ее слага (адреса).
Метод имеет ряд недостатков:
- При большом количестве шаблонов, в них легко запутаться
- Если использовать в именах файлов слаги страниц, шаблоны перестают работать при смене адреса (slug).
- Если перейти на ID, то при большом количестве шаблонов будет непонятно, какой из них за какую страницу отвечает.
Любые файлы, которые создаются первым или вторым способом должны храниться в корне папки темы.
Создание шаблона через фильтр template_include
Последний способ является самым продвинутым и трудным в реализации. Но, вместе с тем, дает наиболее широкие возможности по кастомизации записей, страниц.
Ниже представлен код, который я при необходимости использую для решения подобных задач:
// фильтр передает переменную $template - путь до файла шаблона.
// Изменяя этот путь мы изменяем файл шаблона.
add_filter('template_include', 'my_template');
function my_template( $template ) {
# аналог второго способа
// если это страница со слагом portfolio, используем файл шаблона page-portfolio.php
// используем условный тег is_page()
if( is_page('portfolio') ){
if ( $new_template = locate_template( array( 'page-portfolio.php' ) ) )
return $new_template ;
}
# шаблон для группы рубрик
// этот пример будет использовать файл из папки темы tpl_special-cats.php,
// как шаблон для рубрик с ID 9, названием "Без рубрики" и слагом "php"
if( is_category( array( 9, 'Без рубрики', 'php') ) ){
return get_stylesheet_directory() . '/tpl_special-cats.php';
}
# шаблон для записи по ID
// файл шаблона расположен в папке плагина /my-plugin/site-template.php
global $post;
if( $post->ID == 12 ){
return wp_normalize_path( WP_PLUGIN_DIR ) . '/my-plugin/site-template.php';
}
# шаблон для страниц произвольного типа "book"
// предполагается, что файл шаблона book-tpl.php лежит в папке темы
global $post;
if( $post->post_type == 'book' ){
return get_stylesheet_directory() . '/book-tpl.php';
}
return $template;
}
Размещать его нужно в файл functions.php Вашей темы. Кстати, подобным методом работают встроенные в ВП шаблоны (single, page, search, 404). Только наш код меняет пути шаблонов по заданным условиям.
К примеру, если в адресе записи имеется слово book, будет использован отдельный шаблон, прописанный в файле book-tpl.php.
Если разобраться более подробно, можно создавать огромное количество всяческих фильтров, в зависимости от нужд заказчика. Это, фактически, открывает безграничные возможности по кастомизации внешнего вида страниц.
К примеру, на одном из своих обзорников казино, я применил такую технологию. На обычным страницах у меня настроен вывод текста. А на страницах с обзорами казино (в слаге есть слово casino) – отдельный шаблон, в котором я максимально удобно для юзера привожу всю информацию.
Подключение отдельных header и footer
Можно пойти еще дальше и подключать к разным шаблонам отдельные файлы header.php и footer.php. Как это сделать?
Допустим, у нас есть задача на страницах блога выводить другой хедер, в котором будут заданы контакты для заказа услуг.
- Создаем файл header-blog.php.
- В нужном шаблоне, который будет отвечать за выводи блога (категории и записи) вверху подключаем вместо стандартного хедера альтернативный:
Меняем код:
На:
Есть и другой метод реализовать задуманное:
Аналогично поступаем с любой другой частью сайта (футер, сайдбар и т.д.).
С первого взгляда все это кажется сложным. Но, разобравшись, Вы поймете, насколько это все логично, и какие возможности перед Вами открываются.
Благодарю за материал