Создание страницы шаблона

Шаблон темы

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

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

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

Теперь при создании страницы в админ-панели в блоке «Атрибуты страницы» мы сможем выбрать «шаблон».

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

Создав один шаблон, мы может удобно применять его для разных страниц. Например, мы может создать шаблон без боковой панели и использовать его на разных страницах.
Можно получить только записи с указанным шаблоном. Например, можно вывести все страницы с шаблоном «Услуги» (файл 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 подбирает какой файл использовать по следующей схеме:

Здесь «Custom» это первый способ, когда указан шаблон в админ-панели. Если такой шаблон не указан, то WordPress проверят папку темы на наличие в ней файлов: page-{slag}.php или page-{id}.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.

Об авторе

Ремонт компьютеров, создание web сайтов
Напишите свой комментарий

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

15 − два =