tananin
8/1/2019 - 12:56 PM

Шаблоны страниц в WP

Существует несколько способов создать шаблон страницы

Ролик: https://www.youtube.com/watch?v=RNFRCz0whuw&t=28s

1. Стандартный способ

для ручного выбора шаблона на странице или записи

В директории темы создадим любой файл и в начале пропишем комментарий:

<?php
/*
 * Template Name: Страница продукции
 */
?>

WP автоматически подхватит данный шаблон.

Если нужно разрешить данный шаблон для записей или кастомных типов Нужно добавить:

<?php
/*
 * Template Name: Страница продукции
 * Template Post Type: page, post, product
 */
?>

2. На основе иерархии файлов и шаблонов

Подходит для автоматического назначения шаблона, к примеру для главной или страницы контактов.

Необходимо создать файл page-{слаг страницы}.php или page{ID страницы}.php

Пример: page-contact.php или page-12.php или page-about.php

Недостатки:

  • Шаблон создаётся только для одной - конкретной страницы
  • Шаблон зависит от слага (URL) или ID страницы
  • Шаблон должен быть только в корне темы

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;

}