После активации дочерней темы часто «слетают» цвета, логотип, меню в кастомайзере и опции theme options. Это не баг дочерней темы как таковой: WordPress хранит mods и часть настроек привязанными к stylesheet-имени активной темы. Ниже – рабочие способы перенести настройки с родителя на child без потери кастомизации.
Почему настройки не подхватываются сами
Кастомайзер пишет в option вида theme_mods_{stylesheet}. Для родителя это, например, theme_mods_woodmart, для child – theme_mods_woodmart-child (имя = directory slug темы). При переключении на child WordPress читает уже другой ключ. Отдельные theme options (Redux, Kirki, собственные option_name) тоже часто завязаны на slug или на «активную тему» в логике вендора.
Дочерняя тема наследует PHP-шаблоны и style родителя, но не автоматически копирует сериализованные mods из БД. Их нужно перенести явно.
1. Встроенный импорт/экспорт theme options
Многие коммерческие темы (WoodMart, Flatsome, GeneratePress Premium и другие) умеют выгрузить свои панели настроек в JSON или файл.
Экспорт с родителя
- Активна родительская тема (или child уже активен, но экспорт берёте с той конфигурации, где всё «как надо»).
- Откройте панель темы, например WoodMart → Настройки.
- Раздел Импорт/Экспорт (или Backup / Import Export).
- Экспортируйте JSON/файл и сохраните локально.
Активация child и импорт
- Внешний вид → Темы – активируйте дочернюю тему.
- Снова откройте панель настроек темы.
- Импортируйте сохранённый файл.
Плюс: просто и покрывает опции именно этой темы. Минус: не у всех тем есть экспорт; кастомайзер WordPress и меню/виджеты могут остаться отдельной историей.
2. Плагин Customizer Export/Import
Если нужно перенести именно mods кастомайзера (цвета, логотип, типографика, части header/footer builder, что лежит в theme_mods_*), удобен плагин Customizer Export/Import.
- Плагины → Добавить – установите и активируйте Customizer Export/Import.
- При активной родительской теме: Внешний вид → Настроить → блок Export/Import → Export.
- Активируйте дочернюю тему.
- Снова Настроить → Import, загрузите файл. При необходимости отметьте загрузку связанных изображений, если плагин это предлагает.
Плагин копирует mods кастомайзера. Опции вне Customizer (отдельные option_name theme panel) им могут не покрываться – для них см. п. 1 или ручной перенос.
3. Ручной перенос через базу (theme_mods)
Когда нет UI-экспорта, mods можно скопировать в wp_options (префикс таблицы у вас может отличаться от wp_).
Найти ключ родителя
В phpMyAdmin, Adminer или через CLI:
SELECT option_id, option_name, LENGTH(option_value) AS len FROM wp_options WHERE option_name LIKE 'theme_mods_%';
Или точечно для WoodMart:
SELECT * FROM wp_options WHERE option_name LIKE '%theme_mods_woodmart%';
Нужна строка theme_mods_woodmart (или slug вашей родительской темы). Значение – сериализованный PHP-массив; править «на глаз» в текстовом редакторе опасно из-за длин строк в serialize.
Скопировать значение на child-ключ
Безопаснее не руками в serialize, а через WP-CLI / PHP API (см. ниже). Если всё же через SQL: сделайте полный бэкап БД, затем либо:
- экспорт строки option → вставка новой строки с
option_name = theme_mods_woodmart-childи тем жеoption_value; - либо UPDATE существующей пустой
theme_mods_woodmart-child, подставив value родителя.
Имя child должно совпадать с каталогом темы (как в wp-content/themes/woodmart-child → theme_mods_woodmart-child).
4. Копирование через PHP при switch_theme
Чтобы при первой активации child подтянуть mods родителя, можно повесить обработчик (в mu-plugin или временно в functions.php child; имена тем замените на свои):
function copy_theme_mods_to_child() {
$parent_slug = 'woodmart';
$child_slug = 'woodmart-child';
$parent_mods = get_option( 'theme_mods_' . $parent_slug );
$child_mods = get_option( 'theme_mods_' . $child_slug );
if ( $parent_mods && ( false === $child_mods || $child_mods === array() ) ) {
update_option( 'theme_mods_' . $child_slug, $parent_mods );
}
}
add_action( 'after_switch_theme', 'copy_theme_mods_to_child' );
after_switch_theme срабатывает после переключения; проверка «child ещё пустой» не затирает уже накопленные настройки child. Для разового переноса на проде часто достаточно WP-CLI без постоянного хука.
5. WP-CLI: быстро и предсказуемо
На сервере с WP-CLI:
# посмотреть mods родителя wp option get theme_mods_woodmart --format=json > /tmp/parent-mods.json # записать в ключ дочерней темы wp option update theme_mods_woodmart-child --format=json < /tmp/parent-mods.json # либо одной PHP-строкой wp eval 'update_option( "theme_mods_woodmart-child", get_option( "theme_mods_woodmart" ) );'
После этого сбросьте кэш объекта/страниц, откройте фронт и кастомайзер под child.
Что ещё проверить после переноса
- Меню и расположения –
theme_modsсодержит nav_menu locations; сами меню вwp_termsобщие, но привязки к theme location иногда нужно заново сохранить в Внешний вид → Меню. - Виджеты – сайдбары зависят от
sidebars_widgetsи id зарегистрированных sidebar; если child меняет id зон, виджеты «пропадают» в Inactive. - Отдельные option_name темы (не mods) – ищите в
wp_optionsпо префиксу вендора и переносите так же, если документация темы это допускает. - Кастомный CSS из кастомайзера – обычно внутри theme_mods; дополнительный CSS плагинов живёт отдельно.
Практические советы
- Перед любым SQL/массовым update – бэкап БД и файлов.
- Сначала стейдж или копия сайта, потом прод.
- Не правьте serialize вручную, если не уверены в длинах полей.
- После переноса откройте кастомайзер, нажмите «Опубликовать» один раз – так тема пересоберёт CSS/кэш опций, если вендор так делает.
- Долгосрочный child: правки в PHP/CSS child, настройки – в mods child; родитель обновляйте без перезаписи child-каталога.
Краткий итог
Настройки «привязаны» к slug темы в theme_mods_* и к option_name панелей. Перенос: (1) export/import темы, (2) Customizer Export/Import, (3) копирование option через WP-CLI/PHP/SQL, (4) хук при активации child. Выбирайте самый простой путь, который покрывает ваш стек, и всегда работайте с бэкапом.


