12 октября 2017

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

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

 

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

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

 

/**
* Определим константу, которая будет хранить путь к папке 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, например single-12.php, single-product.php:

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

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

 

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





Практически весь контент размещенный на сайте, вся информация является продуктом студии WSI. Если материалы взяты с других ресурсов, то обязательно указана ссылка на эти ресурсы. Вы можете бесплатно пользоваться информацией с нашего сайта, размещать ее на своих сайтах, но так же обязательна ссылка на наш сайт, Web-Sputnik.Info.


Меню
Копирайт © 2020 'Tochcha' Все права защищены