Добавление шаблона в панель атрибутов страницы для записей и страниц

9 сент. 2010 г., 15:54:16
Просмотры: 33.8K
Голосов: 5

Я хотел бы оставить мою основную тему активной, но позволить пользователям выбирать немного другой макет через панель "Атрибуты страницы/записи". В идеале, я хотел бы хранить этот макет в директории "styles" моей основной темы, в отдельной папке.

MyTheme > styles > My-special-Layout > style.css

Чтобы в панели "Атрибуты страницы" я видел шаблон под названием "My-special-layout"...

Однако у меня есть две проблемы...

  1. Я не могу добиться появления "дочерней" темы в панели "Атрибуты страницы". (Я просто добавляю папку в директорию основной темы и помещаю туда файл style.css со значением "Template: my_main_theme_directory"). Но я никогда не вижу никаких шаблонов в панели "атрибуты страницы".

  2. Я не могу получить панель "Атрибуты страницы" в редакторе ЗАПИСЕЙ. Я хотел бы разрешить применение шаблона как к записям, так и к страницам. Как получить эту панель в редакторе записей?

0
Все ответы на вопрос 2
2

Вы неправильно понимаете дочерние темы. Дочерняя тема — это полностью отдельная тема, которую все должны использовать, но она зависит от другой темы для всех шаблонных частей, которые сама не предоставляет. Вам нужны шаблоны:

http://codex.wordpress.org/Theme_Development#Defining_Custom_Templates

По сути, просто создайте новый файл темы в корневой директории темы (например, foobar.php) и напишите вверху:

/*
Template Name: Foobar
*/

Это даст вам новый шаблон под названием Foobar (очевидно, замените Foobar на любое другое имя. Это имя будет отображаться в выпадающем меню на странице редактора).

На данный момент WordPress поддерживает шаблоны только для страниц и пользовательских типов записей, но не для обычных записей. Есть способы обойти это, например, проверка метаданных записи и загрузка соответствующего шаблона:

function my_post_templater($template){
  if( !is_single() )
    return $template;
  global $wp_query;
  $c_template = get_post_meta( $wp_query->post->ID, '_wp_page_template', true );
  return empty( $c_template ) ? $template : $c_template;
}

add_filter( 'template_include', 'my_post_templater' );

function give_my_posts_templates(){
  add_post_type_support( 'post', 'page-attributes' );
}

add_action( 'init', 'give_my_posts_templates' );

Если вы добавите этот код в файл functions.php вашей темы, это должно сработать (при условии, что у вас действительно есть пользовательские шаблоны в папке темы).

Для получения дополнительной информации о дочерних темах читайте здесь:

http://codex.wordpress.org/Child_Themes

9 сент. 2010 г. 16:44:31
Комментарии

Спасибо, Джон, ты прав. Я изменил заголовок, так как понял, что на самом деле мне нужен не "дочерняя тема", а шаблон. Однако я хочу, чтобы шаблон использовал существующую структуру основной темы (index.php, single.php, page.php и т.д.) и брал информацию о стилях из файла styles/mytemplate/style.css. Как это можно сделать?

Scott B Scott B
9 сент. 2010 г. 16:54:50

Как выбрать шаблон для пользовательского типа записи? Насколько я знаю, выбор шаблонов через атрибуты страницы работает только для страниц.

Michael Michael
11 февр. 2016 г. 08:52:21
0

Начиная с WordPress 4.7+, вы можете использовать 'Template Post Type' в вашем пользовательском файле шаблона, чтобы отображать его в атрибутах страницы как для записей, так и для страниц.

/*
  Имя шаблона: Ваше имя шаблона
  Тип записи шаблона: post, page
*/
19 сент. 2020 г. 22:57:30