WordPress — Специальные шаблоны single.php для разных постов, категорий или тэгов

Главная » WordPress » WordPress — Специальные шаблоны single.php для разных постов, категорий или тэгов

WordPress — Специальные шаблоны single.php для разных постов, категорий или тэгов

Возьмем случай, когда ваш сайт имеет очень разнородное содержание. Допустим, блог, статьи, видео, фотогалереи и т.д. Естественно, в таком случае шаблон single.php (в данной статье под словом «шаблон» я буду иметь ввиду файл темы) не может быть одинаковым для всего этого, ведь для разного содержания лучше иметь отдельный шаблон, который будет наиболее полно отображать свой контент.

Таким образом, у нас есть набор категорий или тэгов, и для каждой (или только для некоторых) нам нужен свой single.php со своим дизайном.

Решение 1  — простое

Ставим плагин «Custom Post Template«. Этот плагин позволяет выбирать шаблон дизайна для каждого поста. Однако делать это нужно вручную и в каждом посте. Если у вас их много, планируйте много времени.

Естественно, вам понадобится сам шаблон. Сделать его очень просто: копируете ваш single.php с новым именем (например, template-video.php) и в самый верх вставляете:

1
2
3
4
5
<?php
/*
Template Name Posts: Video
*/
?>

Вместо Video можете вписать любое название вашего шаблона. Теперь этот шаблон будет доступен для выбора.

Решение 2 — гибкое

Это решение наиболее универсально, поскольку за логику подбора шаблона будет отвечать WordPress.

Для начала создайте в папке вашей темы папку single и переместите в нее ваш single.php. Далее добавьте в ваш functions.php следующие строки:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/**
* Определим константу, которая будет хранить путь к папке single
*/
define( SINGLE_PATH, TEMPLATEPATH . ‘/single’ );
 
/**
* Добавим фильтр, который будет запускать функцию подбора шаблонов
*/
add_filter( ‘single_template’, ‘my_single_template’ );
 
/**
* Функция для подбора шаблона
*/
function my_single_template( $single ) {
    global $wp_query, $post;
 
    /**
     * Проверяем наличие шаблонов по ID поста.
     * Формат имени файла: single-ID.php
     */
    if ( file_exists( SINGLE_PATH . ‘/single-‘ . $post->ID . ‘.php’ ) ) {
        return SINGLE_PATH . ‘/single-‘ . $post->ID . ‘.php’;
    }
 
    /**
     * Проверяем наличие шаблонов для категорий, ищем по ID категории или слагу
     * Формат имени файла: single-cat-SLUG.php или single-cat-ID.php
     */
    foreach ( (array) get_the_category() as $cat ) :
 
        if ( file_exists( SINGLE_PATH . ‘/single-cat-‘ . $cat->slug . ‘.php’ ) ) {
            return SINGLE_PATH . ‘/single-cat-‘ . $cat->slug . ‘.php’;
        } elseif ( file_exists( SINGLE_PATH . ‘/single-cat-‘ . $cat->term_id . ‘.php’ ) ) {
            return SINGLE_PATH . ‘/single-cat-‘ . $cat->term_id . ‘.php’;
        }
 
    endforeach;
 
    /**
     * Проверяем наличие шаблонов для тэгов, ищем по ID тэга или слагу
     * Формат имени файла: single-tag-SLUG.php или single-tag-ID.php
     */
    $wp_query->in_the_loop = true;
    foreach ( (array) get_the_tags() as $tag ) :
 
        if ( file_exists( SINGLE_PATH . ‘/single-tag-‘ . $tag->slug . ‘.php’ ) ) {
            return SINGLE_PATH . ‘/single-tag-‘ . $tag->slug . ‘.php’;
        } elseif ( file_exists( SINGLE_PATH . ‘/single-tag-‘ . $tag->term_id . ‘.php’ ) ) {
            return SINGLE_PATH . ‘/single-tag-‘ . $tag->term_id . ‘.php’;
        }
 
    endforeach;
    $wp_query->in_the_loop = false;
 
    /**
     * Если ничего не найдено открываем стандартный single.php
     */
    if ( file_exists( SINGLE_PATH . ‘/single.php’ ) ) {
        return SINGLE_PATH . ‘/single.php’;
    }
 
    return $single;
}

Таким образом, у нас есть возможность создавать отдельные шаблоны single:

  • по ID поста
  • по ID или слагу категории, к которой относится пост
  • по ID или слагу тэга, к которому относится пост

Таким вот нехитрым способом вы можете сделать индивидуальные шаблоны single для вашего сайта.

Если есть вопросы задавайте в комментариях.

https://neolot.com/wordpress/wordpress-specialnye-shablony-single-php-dlya-raznyx-postov-kategorij-ili-tegov

Губарь Маргарита Александровна