WordPress как на ладони
wordpress jino

3 способа создать шаблон страницы

В этой статье я расскажу о способах создания шаблонов для постоянных страниц WordPress. Каждый способ несет в себе плюсы и минусы. Но прежде чем начать, коротко о том, что такое страницы и чем они отличаются от записей.

В WordPress можно создавать страницы (page) и записи (post). Отличаются они тем, что записи: попадают в ленту на главной странице; для записей указываются категории; записи не могут быть древовидными, а страницы: используются для такого содержимого как "Обо мне", "Контакты", "Карта сайта"; не имеют категорий, а имеют древовидную структуру. Записи обычно предназначены для хронологической информации (по времени добавления), а страницы для древовидной структуры не зависимой от времени. Для примера, эта статья опубликована как "запись" в рубрике "Кодекс", а ссылки в меню шапки ведут на страницы: Функции.

Страницы похожи на записи — они расположены в одной таблице базы данных и данные у них почти одинаковы: заголовок, текст, дополнительные поля и т.д. И то и другое — это записи, но разных типов: страницы древовидные и организуются путем создания родительских и дочерних страниц, а записи объединяются рубриками и метками. В WordPress можно создавать дополнительные типы записей древовидные или нет.

Создание страниц в WordPress

Часто нужно создать отдельный шаблон страницы, чтобы вывод информации значительно отличается от остальных страниц. Создавая шаблон страницы в WordPress, можно совершенно изменить страницу: удалить сайдбар, подвал, шапку, можно изменить страницу до неузнаваемости. Например, на этом сайте так изменяется страница на которой выводятся коды файлов WordPress.

Способ 1: шаблон страницы через файл с произвольным названием и подключением его в админ-панели (классический способ)

Это самый распространенный способ создать шаблон страницы в WordPress. Для этого нужно создать .php файл, например, tpl_my-page.php в папке темы и в самом начале файла вписать пометку, что созданный файл является шаблоном для страниц:

<?php
/*
Template Name: Мой шаблон страницы
*/
?>

<!-- Здесь html/php код шаблона -->

Теперь при создании страницы в админ-панели в блоке «Свойства страницы» мы сможем выбрать "шаблон":

Метабокс свойства страницы

С версии WordPress 4.7. такие шаблоны страниц можно создать для любого типа записи, а не только для page. Для этого дополните комментарии строкой: Template Post Type: post, page, где post, page - это названия типов записей к которым относится шаблон.

/*
Template Name: Мой шаблон страницы
Template Post Type: post, page, product
*/

Подробнее читайте в отдельной статье.

Преимущества:

  • Создав один шаблон, мы может удобно применять его для разных страниц. Например, можно создать шаблон без боковой панели и использовать его на разных страницах.

  • Можно получить только записи с указанным шаблоном. Например, можно вывести все страницы с шаблоном «Услуги» (файл servises.php). Иногда это удобно. Название файла шаблона хранится в метаполе _wp_page_template, поэтому чтобы вывести страницы с указанным шаблоном нужно создать запрос по метаполю (см. WP_Query).

Недостатки:

После создания файла шаблона в папке темы, нужно зайти в админ-панель и установить шаблон для страницы. При разработке это не всегда удобно. Поэтому если подразумевается использовать шаблон только для одной страницы, используйте второй метод.

Как это работает:

Когда вы заходите в админ-панель на страницу редактирования записи древовидного типа, WordPress просматривает все файлы шаблона на наличие в них строки:

Template Name: ***

Строка может располагаться где угодно и как угодно в файле.

Все файлы с подобными строками собираются и выводятся в выбор шаблона в блок "Атрибуты страницы".

При публикации страницы, в произвольное поле _wp_page_template записывается название файла шаблона или  default, если шаблон не указан:

_wp_page_template = default
_wp_page_template = tpl_my-page.php

Далее, когда пользователь посещает страницу, WordPress проверят метаполе _wp_page_template, если шаблон установлен, то используется файл шаблона. В противном случае поиск шаблона страницы продолжается по иерархии.

Способ 2: шаблон страницы через файл с конкретным названием (иерархия файлов шаблона)

Этот способ подразумевает создание файла в папке темы с конкретным названием: page-{слаг-страницы}.php или page-{ID-страницы}.php. Подробнее смотрите по этой ссылке.

При создании страницы ей устанавливается ярлык (слаг, альтернативное название). Он используется в УРЛ страницы. И его можно изменить:

Изменение слага страницы
Изменение слага страницы

Для создание шаблона этим способом, вам нужно узнать слаг страницы и создать файл в папке темы. Допустим, наш слаг как на картинке равен contacts, тогда создадим в теме файл page-contacts.php. и заполним его нужным кодом (можно скопировать содержимое из файла шаблона page.php и отредактировать под себя). Все, теперь при посещении страницы мы должны увидеть новый шаблон. Аналогично можно взять ID (пусть 12) страницы и создать файл page-12.php.

Достоинства:

Нет необходимости заходить в админ-панель и устанавливать файл шаблона. Шаблон начинает работать сразу после создания файла. Удобно при разработке.

Недостатки:

Шаблон создается только для одной, конкретной страницы. Зависит от слага страницы, если он изменится шаблон работать не будет. Если использовать ID,  то зависимость от слага пропадает, но становится непонятно в файла темы, к какой странице относится шаблон (если несколько шаблонов с ID).

Практически бесполезен при написании шаблонов, а тем-более плагинов. Его можно использовать, когда правишь свой сайт, в котором слаг или ID страницы известны заранее.

Как это работает:

WordPeress подбирает какой файл использовать в следующем порядке (файлы должны быть в корне темы):

  • {любое_название}.php (когда используется шаблон страницы)
  • page-{ярлык_записи}.php
  • page-{ID_записи}.php
  • page.php
  • singular.php
  • index.php

Способ 3: шаблон страницы через фильтр "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 или в плагин, или подключить как-то еще. Как видно из примера во время фильтра template_include уже работают условные теги, установлены глобальные переменные: $wp_query, $post и т.д.

Достоинства:

  • Можно установить шаблон для любой страницы или группы страниц. Практически полный карт-бланш в действиях.

  • Можно создать шаблон при написании плагина.

Недостатки:

Необходимость писать код и отдельно его подключать (например, в functions.php темы).

Как это работает:

Читайте описание фильтра template_include.

3 способа создать шаблон страницы 64 комментария
Полезные 4 Вопросы 3 Все
  • Davis Brown

    Как создать свою идеальную тему для WordPress с помощью TemplateToaster

    Ответитьгод назад #
  • St

    Почему то картинка не добавилась в комментарии "Название файла шаблона храниться в метаполе _wp_page_template", "храниТся" по-моему, извиняюсь еще раз

    1
  • Анатолий

    Здравствуйте!
    Подскажите пожалуйста каким способом лучше использовать при создании шаблона.
    На сайте хочу посоздавать лендинги отдельными страницами, со своими меню, т.е шаблон полностью чистый. Создание лендингов планирую сделать конструктором (visual composer)
    И хочу создать шаблон для этого. Но тут вылезла проблема: не могу понять как удалить основное меню с основного сайта?

  • Антон

    Привет, а не знаешь, можно ли как-то извернуться и назначить шаблон странице с любым урлом? Например, с таким:

    http://my-site.ru/?category_name=&tag=novosti&anything1=&new=&anything2=&servis=&anything3=my-home&anything4=&movie=&anything5=&anything6=&anything7=

    Это после работы фильтрации по таксономиям. Там вариации разные могут быть, но мне нужно для одного конкретного урла, или для нескольких. При этом у каждого отдельного урла должен быть свой шаблон.

    • Kama4696

      Можно, смотрит 3 способ, используй параметры запроса для проверки...

  • Нина Коваленко cайт: probistiens.ru

    Здавствуйте,
    Очень замечательная статья, но мне нужна подсказка, смогу ли я сама справиться.Где именно разместить код в файле темы functions.php. Меня интересует 3 способ: шаблон страницы.

  • Алекс

    Здравствуйте, можете помочь пожалуйста, использую тему Poseidon , каждый раз при создании новой записи мне приходится менять с базового шаблона на шаблон fullwidth, как сделать fullwidth по уполномочию для всех записей?

    • campusboy1951 cайт: www.youtube.com/c/wpplus

      Привет. Сделать шаблон fullwidth под именем page.php и он станет по умолчанию.

      1
      • Алекс

        Спасибо все получилось, толь я заменил не page.php а single.php

  • petrozavodsky706 cайт: alkoweb.ru

    Опечатка

    В противном случает поиск шаблона страницы продолжается по иерархии

    -1
  • Юрий

    Возможно ли создать шаблон для записей?!

Здравствуйте, !

Ваш комментарий
Предпросмотр