Как сделать дочернюю тему
Дочерняя тема - это тема, которая создана на основе родительской. Недостающие части дочерней темы берутся из родительской. Благодаря чему дочерние темы часто используются в процессе разработки на работающем сайте: можно не беспокоиться о создании всего функционала сразу, потому что недостающие компоненты будут взяты из родительской темы.Дочерние темы - это хороший инструмент разработки, но его гибкость зависит от правильности создания родитской темы. Некоторые темы подходят в качестве родительских лучше, чем другие. Поэтому далее в примерах этой статьи мы используем стандартную тему "Twenty Nineteen", которая доступна в WordPress из коробки.
Чтобы создать свою дочернюю тему, достаточно создать папку для неё и один "style.css" файл. Создадим папку по адресу:
/wp-content/themes/twentynineteen-child
В этой папке создадим файл "style.css" со следующим содержанием:
/*
Theme Name: Дочерняя тема
Template: twentynineteen
*/
/* стили родительской темы. Они должны
стоять перед стилями дочерней темы,
иначе их загрузки не произойдёт. */
@import url("../twentynineteen/style.css");
/* стили дочерней темы */
h1{ font-size: 20px; color: green; }
Строки в комментарии "Theme Name" и "Template" являются обязательными. А "Template" содержит название той темы (регистрозависимое название её папки), которая является родительской для создания.
Обратите внимание, что из-за "@import" запроса файлы стилей загружаются последовательно, что увеличивает время загрузки страницы.
На этом создание дочерней темы можно считать законченным. Осталось только активировать тему в панели администрирования WordPress, чтобы увидеть изменения. Как было сказано ранее, дочерняя тема берёт недостающие файлы из родительской. Если же файл создан в дочерней, то родительский не будет использоваться. Это верно для большинства файлов, кроме "functions.php", который содержит функции темы. Функции в этом файле из родительской темы не заменяют, а дополняют дочерние.
В коде примера мы импортировали через "import" стили родительской темы. Потому что файл style.css существует и в родительской, и в дочерней теме. А в таком случае он не будет загружаться из родительско темы - придётся загружать его принудительно.
Файл "functions.php" в дочерней теме
Файлы "functions.php" дочерней и родительской темы подключаются всегда. Причём сначала подключается "functions.php" в дочерней теме, а потом в родительской. Отсюда появляется тезис, который был озвучен в начале параграфа: не все темы подходят на роль родительской. Потому что если в родительской теме функции не проверяются на существование, то они будут конфликтовать с одноимёнными функциями в дочерней теме. Необходимо чтобы в родительской теме все функции были написаны так:if( ! function_exists( 'название_функции' ) ){
function название_функции(){
// код функции
}
}
В таком случае при совпадении названий функций в двух файлах будет использоваться функция в дочерней теме.