Добавление шаблона в панель атрибутов страницы для записей и страниц
Я хотел бы оставить мою основную тему активной, но позволить пользователям выбирать немного другой макет через панель "Атрибуты страницы/записи". В идеале, я хотел бы хранить этот макет в директории "styles" моей основной темы, в отдельной папке.
MyTheme > styles > My-special-Layout > style.css
Чтобы в панели "Атрибуты страницы" я видел шаблон под названием "My-special-layout"...
Однако у меня есть две проблемы...
Я не могу добиться появления "дочерней" темы в панели "Атрибуты страницы". (Я просто добавляю папку в директорию основной темы и помещаю туда файл
style.css
со значением "Template: my_main_theme_directory
"). Но я никогда не вижу никаких шаблонов в панели "атрибуты страницы".Я не могу получить панель "Атрибуты страницы" в редакторе ЗАПИСЕЙ. Я хотел бы разрешить применение шаблона как к записям, так и к страницам. Как получить эту панель в редакторе записей?

Вы неправильно понимаете дочерние темы. Дочерняя тема — это полностью отдельная тема, которую все должны использовать, но она зависит от другой темы для всех шаблонных частей, которые сама не предоставляет. Вам нужны шаблоны:
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
вашей темы, это должно сработать (при условии, что у вас действительно есть пользовательские шаблоны в папке темы).
Для получения дополнительной информации о дочерних темах читайте здесь:

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