В некоторых случаях при работе над сайтом заказчик просит не вносить изменения в оригинальную тему. Это необходимо, если в будущем планируется делать ее обновления и внесенные в файлы изменения исчезнут.
Для подобных случаев в WordPress предусмотрен механизм создания дочерней темы (child theme). Такая тема использует в качестве основы родительский шаблон и при этом вы можете добавить в нее свои собственные файлы и функции.
Механизм работы с дочерними темами довольно простой. Прежде всего вам нужно в папке wp-content/themes создать новую папку для нее. Будем считать, что папка с основным шаблоном у нас называется parent, а мы создадим новую, которую назовем child.
В папку child нужно поместить, как минимум, один файл style.css. В нем необходимо разместить следующие инструкции:
1 2 3 4 |
/* Theme Name: Child Template: parent */ |
Первая инструкция (Theme Name: Child) это просто название дочерней темы, фактически она не является обязательной, а вот вторая инструкция (Template: parent) является обязательной, и указывает, что данный шаблон является дочерним к parent.
Если вы помещаете в папку с дочерней темой какой-либо файл, то он заменяет такой же из родительского шаблона. Это правило действует для всех файлов, кроме functions.php.
Поэтому, чтобы сохранить стили родительской темы, вам нужно либо поместить в style.css инструкции из оригинального файла, либо добавить в него следующую инструкцию, которая загрузит style.css:
1 |
@import url("../parent/style.css"); |
Для корректной работы перед директивой @import не должно быть никаких правил CSS.
Никаких дополнительных настроек делать не нужно. Иногда автоматическое подключение стилей css из дочерней папки может не работать. Разработчик шаблона должен использовать функции:
- get_stylesheet_uri() — адрес файла стилей;
- get_stylesheet_directory_uri() — адрес папки со стилями,
но он может подключать style.css каким либо другим способом, что приводит к возникновению проблем. В этом случае, скорее всего, будет не сложно посмотреть код и найти проблему.
Подробнее по файлу functions.php. Если в дочерней теме есть такой файл, то движок сначала загрузит именно его, а затем файл с этим именем из родительской папки. Таким образом вы можете свободно расширять функционал шаблона.
Все прочие файлы, находящиеся в дочерней папке, как уже было сказано, заменяют аналоги из родительской темы. То есть вы можете взять оригинальный single.php, внести в него изменения и поместить в дочернюю папку. При работе движка Вордпресс будет использоваться именно он.
Плюсы использования дочерней темы понятны: вы сохраняете нетронутой оригинальную тему и можете свободно ее обновлять. Минусов особых нет, если только в оригинальном шаблоне разработчик не допустил ошибки, затрудняющие использование.
Структура папок в дочерней теме должна совпадать с родительской структурой, если вы модифицируете файлы во вложенных папках.
Спасибо, ваша статья помогла разобраться. Как и всегда всё содержательно и понятно.
Статья хорошая — спасибо, многое объясняет, но я не всё понимаю…
Я так понял — если файл с изменениями single.php добавлять в дочернюю тему, то вставлять нужно в таком виде какой он есть (естественно со своими дополнениями) — т.е. без всяких каких-либо дополнительных строк в начале.
Интересно в родительской теме сам файл single.php может быть как-то тоже изменён автором при обновлении или эти файлы уже не трогают?
Просто я новичок — занялся было этим делом и что-то вдруг вопросы «непонятные» начали появляться…
Roman, совершенно верно, вы можете скопировать single.php из родительской папки в дочернюю и внести в нее свои изменения. Если в дочерней папке будет файл single.php, то выполняться будет именно он, файл из родительской папки выполняться не будет.
Спасибо Вам за ответ. Вчера вроде разобрался с основными вопросами. Единственное, если функции изменённого файла будут подхватываться из дочерней темы, то при очередном её обновлении (если автор вдруг решит изменить и этот файл тоже) данные так и будут браться из этого файла — который останется без этих изменений или придётся как-то отслеживать это. Хотя, по моему разработчики шаблонов, как правило вносят изменения в файл функций, а основные файлы с версткой стараются не трогать.
Файл function.php используется как из дочерней, так и из родительской темы (это единственный файл, который так отрабатывает). Поэтому если разработчик добавит функцию в этот файл, она будет работать, несмотря на то, что у вас будет и свой файл function.php в папке с дочерней темой.