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=

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

    • Kama4464

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

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

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

  • Алекс

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

    • campusboy1844 cайт: wp-plus.ru

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

      1
      • Алекс

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

  • petrozavodsky675 cайт: alkoweb.ru

    Опечатка

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

    -1
  • Юрий

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

    Ответить4 месяца назад #

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

Ваш комментарий