Возьмем случай, когда ваш сайт имеет очень разнородное содержание. Допустим, блог, статьи, видео, фотогалереи и т.д. Естественно, в таком случае шаблон 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 для вашего сайта.

 

 

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


Защитный код
Обновить