Дочерняя тема (child theme) — это отдельная тема WordPress, которая наследует весь функционал и стили родительской темы, но позволяет безопасно вносить изменения. Без дочерней темы любое обновление родительской темы затрёт ваши правки.
Зачем нужна дочерняя тема
Когда вы правите файлы родительской темы напрямую, следующее обновление затрёт все изменения. Дочерняя тема решает эту проблему: ваши изменения хранятся отдельно и не теряются при обновлениях.
Создание дочерней темы вручную
Создайте папку wp-content/themes/your-child-theme/ и два файла:
style.css
/*
Theme Name: My Child Theme
Template: twentytwentyfour
Description: Child theme for Twenty Twenty-Four
Version: 1.0
*/
/* Здесь ваши кастомные стили */
.site-header {
background: #1a1a2e;
}
functions.php
<?php
add_action('wp_enqueue_scripts', 'child_theme_enqueue_styles');
function child_theme_enqueue_styles() {
$parent_style = 'parent-style';
wp_enqueue_style($parent_style, get_template_directory_uri() . '/style.css');
wp_enqueue_style('child-style',
get_stylesheet_directory_uri() . '/style.css',
array($parent_style),
wp_get_theme()->get('Version')
);
}
twentytwentyfour).Структура дочерней темы
| Файл | Назначение |
|---|---|
| style.css | Метаданные темы + ваши стили |
| functions.php | Подключение стилей родителя + хуки |
| screenshot.png | Превью в панели тем (880×660 px) |
| template-parts/ | Переопределённые части шаблона |
Переопределение шаблонов
Скопируйте нужный файл из родительской темы в папку дочерней с тем же путём — WordPress автоматически использует файл из дочерней темы:
# Например, переопределить header.php:
cp wp-content/themes/twentytwentyfour/header.php wp-content/themes/my-child-theme/header.php
# Теперь редактируйте дочерний файл
Частые ошибки дочерних тем
| Сообщение или симптом | Причина |
|---|---|
| The parent theme is missing | В поле Template в style.css указано неверное имя папки родительской темы — опечатка или неверный регистр |
| Стили дочерней темы не применяются | Стиль дочерней темы подключён с тем же приоритетом, что и родительский, и родительский загружается позже |
| Fatal error: Cannot redeclare function | Функция с таким же именем уже объявлена в родительской теме — нужно переименовать функцию в дочерней теме |
| После смены темы сайт выглядит без стилей | Активирована дочерняя тема, но родительская тема была удалена из wp-content/themes |
Дочерняя тема vs плагин для кастомизации
| Критерий | Дочерняя тема | Плагин с хуками |
|---|---|---|
| Переопределение шаблонов темы | Да, прямым копированием файлов | Нет, только через фильтры и хуки |
| Переживает смену темы | Нет, привязана к родительской теме | Да, работает с любой темой |
| Подходит для стилей и вёрстки | Да, основной инструмент | Ограниченно |
| Подходит для бизнес-логики | Не рекомендуется смешивать | Да, логика должна жить в плагине |
Когда дочерняя тема не подходит
- Правки не касаются шаблонов и стилей темы, а добавляют функциональность (произвольные типы записей, интеграции) — для этого нужен отдельный плагин
- Родительская тема — конструктор с собственным визуальным редактором, который не читает файлы дочерней темы
- Планируется полная смена темы в ближайшее время — переопределённые шаблоны придётся переписывать заново под другую тему
- Изменения нужны только в контенте страниц, а не в коде — для этого достаточно редактора блоков
Проверка результата
# Убедиться, что активна именно дочерняя тема
wp theme list --status=active --fields=name,status
# Проверить, что style.css дочерней темы реально отдаётся браузеру
curl -sI https://example.com/wp-content/themes/my-child-theme/style.css
Если wp theme list показывает активной родительскую тему — активация дочерней не прошла, вернитесь к шагу с Template в style.css. Смежные материалы: ускорение WordPress и команды WP-CLI.
Дочерние темы и конструкторы вроде Elementor/Divi
Если сайт собран в визуальном конструкторе страниц, часть кастомизаций (глобальные стили, шаблоны шапки и подвала) хранится не в файлах темы, а в базе данных самого конструктора. Дочерняя тема в этом случае по-прежнему полезна для правок style.css и functions.php, но не заменяет резервное копирование настроек конструктора — их нужно экспортировать отдельно через встроенный экспорт/импорт шаблонов, иначе перенос темы на другой сайт не перенесёт вёрстку, собранную в конструкторе.
Частые вопросы
Что произойдёт с сайтом, если случайно удалить родительскую тему, пока активна дочерняя?
Сайт останется без стилей и части функциональности: дочерняя тема хранит только изменения и сама по себе не содержит полного кода вёрстки — она подключает стили и шаблоны родителя через код в functions.php. Без родительской темы в папке тем WordPress не найдёт, что наследовать, и визуально сайт развалится, даже если дочерняя тема формально остаётся активной.
Нужна ли дочерняя тема для сайта, собранного в Elementor или Divi?
Да, но её роль ограничена: правки style.css и functions.php по-прежнему защищены от обновлений родительской темы. А вот глобальные стили, шаблоны шапки и подвала самого конструктора хранятся в базе данных, а не в файлах темы, поэтому дочерняя тема их не переживёт при переносе — такие настройки нужно экспортировать отдельно через встроенный инструмент конструктора.
Можно ли назвать функцию в дочерней теме так же, как в родительской?
Нет — если родительская тема уже объявила функцию с таким именем, попытка объявить её повторно в дочерней теме вызывает фатальную ошибку PHP о повторном объявлении. Решение простое: дать функции в дочерней теме уникальное имя с собственным префиксом и подключить её к нужному хуку через add_action или add_filter, а не полагаться на совпадение имени с родительской функцией.
Что делать, если нужно добавить произвольный тип записей или сложную функциональность, а не просто изменить стили?
Для функциональности вроде произвольных типов записей или интеграций дочерняя тема — не лучший инструмент: при смене темы такой код пропадёт вместе с ней. Логику подобного рода правильнее выносить в отдельный плагин, который переживёт смену любой темы, а дочернюю тему оставить только для стилей, вёрстки и переопределения шаблонов.