Дочерняя тема
У собственной темы есть общий каркас и палитра. Рассмотрим ситуацию, когда pw-workshop становится обновляемой основой нескольких сайтов, а один из них хочет другой акцент и футер. Изменение файлов основы делает последующее обновление рискованным: новая версия может затереть местную правку. Создадим дочернюю тему, которая явно хранит отличие. Результат урока — небольшой самостоятельный каталог изменений при сохранении доступной родительской темы.
Дочерняя тема наследует возможности родителя и может переопределять отдельные файлы и настройки. При этом в WordPress существуют и пользовательские изменения базы, которые способны иметь более высокий приоритет. Механизм и отличия functions.php описаны в официальном руководстве. В нашем примере родитель — конкретный снимок после урока 12, без сохранённых переопределений редактора сайта. Эта предпосылка нужна, чтобы изменение файла действительно объясняло новый вывод.
Связь с родителем
Создайте рядом с pw-workshop каталог pw-workshop-child. В его style.css поле Template должно точно совпасть с именем каталога родителя, а не с видимым Theme Name. Файл целиком содержит:
/*
Theme Name: PW Workshop Child
Template: pw-workshop
Description: Educational variation of PW Workshop.
Version: 0.1.0
Requires at least: 7.1
Requires PHP: 8.3
Text Domain: pw-workshop-child
*/
Пока в stylesheet нет собственных CSS-правил и нет functions.php. Блочная тема получает визуальные настройки из theme.json; мы не добавляем код подключения стилей по привычке из примера классической темы. Если позже понадобятся собственные правила CSS, требуется понять, кто и как загружает stylesheet. Родительская тема, которая уже подключает активный stylesheet, и тема, которая ничего не подключает, требуют разных решений. В нашем родителе такого enqueue нет.
Добавим полный файл theme.json дочерней темы. Он меняет применяемый цвет ссылок, не переименовывая существующие пресеты родителя:
{
"version": 3,
"styles": {
"elements": {
"link": {"color": {"text": "#22683b"}}
}
}
}
Такой выбор демонстрирует точечное изменение стиля. Палитра редактора по-прежнему наследуется из родителя, а ссылки используют указанный цвет. Если нужно изменить именно пресет accent для всех потребителей, следует отдельно согласовать итоговую палитру. Не обещаем, что любой массив настроек объединяется по нашим ожиданиям при частичном копировании одного элемента. Для учебной вариации меняем один явно обозначенный конечный стиль и проверяем его на всех страницах.
Переопределение части
В дочернем каталоге создадим parts/footer.html с тем же именем, что у родителя. Полный файл содержит новую формулировку:
<!-- wp:group {"tagName":"footer","layout":{"type":"constrained"}} -->
<footer class="wp-block-group"><!-- wp:paragraph -->
<p>Веб-мастерская: учебная вариация оформления.</p>
<!-- /wp:paragraph --></footer>
<!-- /wp:group -->
После отдельной активации дочерней темы ожидаются прежние шаблоны page, single и index, прежний хедер, новая строка футера и другой цвет ссылок. Содержимое записей и их URL не должно меняться. Дочерняя тема не содержит копию базы, не создаёт новых страниц и не является экспортом редакторских материалов. Если при переключении исчезает навигация, сначала определите её источник и связь с темой: сохранённые настройки оформления могут зависеть от активного состояния, а не только от файла.
Родитель должен оставаться установленным. Дочерний каталог с Template: pw-workshop не превращается в самостоятельную тему, если удалить основу. Архив серии содержит оба набора файлов в отдельном сценарии 13. При самостоятельном прохождении выбирайте именно этот родительский снимок, чтобы не сравнивать ребёнка с произвольной поздней версией. Для реального проекта версию основы и диапазон совместимости следует зафиксировать в сопровождении, а не полагаться на одинаковое название каталога.
Что происходит при обновлении основы
Представим, что у родительского футера появляется ссылка на правила использования материалов. Дочерняя тема уже переопределяет весь footer, поэтому новая ссылка не обязана появиться в её выводе. Это важное ограничение: сохранение собственных изменений означает также обязанность читать обновления переопределённых файлов. Дочерний вариант не является интеллектуальным слиянием отдельных абзацев. Сравните новый родительский footer со своим и решите, какие изменения нужно перенести вручную.
Вторая ситуация: основа меняет типографику H2 в theme.json. Дочерняя тема не задаёт этот элемент, поэтому изменение может наследоваться. Следовательно, «наши правки не затёрлись» не означает неизменность всего внешнего вида. Нужно проверить основные виды страниц после обновления основы. В учебной матрице сравниваем study, одну запись и ленту. Для рабочего сайта дополнительно важны формы, ошибки, поиск и длинные названия, которые простой набор примеров ещё не покрывает.
Файл functions.php имеет особое поведение: дочерний и родительский файлы могут загружаться оба, а дочерний не заменяет родительский целиком. Поэтому копирование всех функций основы под теми же именами может вызвать повторное определение. Здесь мы не создаём ни одной функции, избегая этого дополнительного механизма. В следующем блоке серии функция сайта будет вынесена в плагин; её жизненный цикл не должен зависеть от переключения оформлений.
Не переносите в дочерний каталог файлы только ради одинаковой структуры папок. Отсутствующий собственный page.html означает осознанное наследование, а пустая копия может стать самостоятельным переопределением и испортить страницу. Маленькая дочерняя тема ценна тем, что по списку файлов видно её действительные отличия. В нашем случае это метаданные, конечный цвет ссылки и футер, а не новый набор страниц.
Граница полезности дочерней темы
Если изменения затрагивают почти каждый шаблон, паттерн и настройку, дочерняя тема перестаёт быть небольшой вариацией. Обновления основы потребуют сравнения большого количества переопределений. В таком случае самостоятельная тема может оказаться понятнее, но это проектное решение с собственной ответственностью за поддержку. Не создавайте длинную цепочку наследования: стандартный механизм WordPress не обещает произвольные уровни «внуков». Наш сценарий содержит только родителя и одного ребёнка.
У пользовательских изменений редактора сайта остаётся отдельное место в базе. Если зелёная ссылка не появилась, проверьте локальный цвет блока и сохранённые глобальные стили активной темы. Редактирование файла дочерней темы не должно сопровождаться бездумным удалением всей пользовательской настройки: там могут находиться важные изменения других страниц. Сначала экспортируйте и определите конкретное переопределение. В нашем учебном начале таких данных намеренно нет.
Ожидаемый результат — понятный набор трёх файлов дочерней темы и установленный родитель после урока 12. Активация, наследование и обновление здесь не выполнялись. Материалы архива фиксируют сценарий и непроверенные места, позволяя читателю отметить наблюдения отдельно. Для следующих уроков вернёмся к основной теме pw-workshop; дочерняя вариация остаётся самостоятельной веткой, которую не нужно незаметно накладывать на все последующие снимки.