Дочерние темы

Дочерняя тема в WordPress - это тема, наследующая функциональность другой, родительской темы. Использование дочерней темы позволяет дополнять или изменять дизайн и функциональность родительской темы, не изменяя файлы исходной, родительской темы. А это значит, что можно будет обновлять родительскую тему при появлении новой версии, сохраняя свои изменения.
Чтобы создать дочернюю тему, нужно, как минимум, создать папку темы и поместить в нее файл style.css с соответствующим заголовком. В этой статье в качестве родительской темы используется тема Twenty Ten, новая дефолтная тема WordPress 3.0.

Содержание:

Папка дочерней темы

Дочерняя тема находится в своей папке внутри папки WordPress wp-content/themes. Имя ее может быть любым, и она должна содержать файл style.css - единственный обязательный файл дочерней темы.

Папки тем и дочерних тем в cPanel

Обязательный файл style.css

В файле style.css дочерней темы задается специальный информационный заголовок, по которому WordPress узнает, что тема является дочерней, и заменяет этим файлом style.css файл стилей родительской темы.

Информационный заголовок должен находиться в самом начале файла и содержать строку Template: с указанием имени папки родительской темы.

Далее следует обычное содержимое файла стилей. Этот файл полностью заменяет файл стилей родительской темы (файл style.css родительской темы не загружается). Поэтому, если нужно только немного изменить дизайн родительской темы, что-то добавить в него, а не изменять кардинально, нужно сначала явно импортировать файл стилей родительской темы с помощью директивы @import, а затем уже добавлять свои изменения.

Допустим, мы хотим изменить цвет заголовка сайта в теме Twenty Ten. Создаем и активируем дочернюю тему с таким файлом стилей style.css:

/*
Theme Name:     Twenty Ten Child
Theme URI:      http: //example.com/
Description:    Child theme for the Twenty Ten theme
Author: mblogm
Author URI:     http: //example.com/about/
Template:       twentyten
Version:        0.1.0
*/
@import url("../twentyten/style.css");
@import url("../twentyten/rtl.css");
#site-title a {
  color: #009900;
}

Здесь обязательные строки:
Theme Name - имя дочерней темы и
Template - имя папки родительской темы (учитывается регистр символов) )

Для поддержки RTL-языков, т.е. языков, в которых символы пишутся справа налево (Right To Left, RTL) , в тему добавляется файл rtl.css (WordPress автоматически загружает файл rtl.css, если is_rtl().)

Файл functions.php

В отличие от style.css, файл functions.php дочерней темы не переопределяет, а дополняет файл родительской темы functions.php (файл дочерней темы загружается перед файлом родительской темы.)

Если нужно добавить в тему PHP-функцию, ее можно добавить в файл functions.php темы или создать дочернюю тему с файлом functions.php, в который можно помещать все дополнительные функции.

Файл functions.php содержит открывающий тег <?php в начале и закрывающий тег ?> в конце, между которыми можно располагать любое количество функций. Например, следующий файл functions.php добавляет ссылку на файл иконки сайта favicon.ico в заголовки HTML-страниц:

function favicon_link() {
  echo '<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico" />' . "n";
  }
add_action('wp_head', 'favicon_link');

*** Поскольку файл функций (functions.php) дочерней темы загружается раньше файла функций родительской темы, можно сделать так, чтобы функции темы можно было заменять функциями дочерней темы, например:

// в файле functions.php родительской темы:
if (!function_exists('theme_special_nav')) {
  function theme_special_nav() {
  ...
  }
}

Дочерняя тема, объявляющая эту PHP-функцию, может заменять родительскую функцию.

Включение файлов

При включении файлов в файле functions.php дочерней темы нужно использовать константу STYLESHEETPATH, а не часто используемую константу TEMPLATEPATH:.

require_once( STYLESHEETPATH . '/path/to/file/in/child/theme.php' );

Файлы темы

Файлы шаблонов дочерней темы (single.php, page.php, ...) работают так же, как и файл style.css, т.е. переопределяют соответствующие файлы родительской темы (файл index.php может быть переопределен только, начиная с WordPress версии 3.0.).

Это позволяет добавлять шаблоны, которых нет в родительской теме, например, для страницы-карты сайта или для страниц с одной колонкой, и дополнять или полностью изменять шаблоны родительской темы.

Полезные статьи:

(Это вольный перевод статьи Кодекса "Child Themes")

8 комментариев: Дочерние темы

  1. Юрий говорит:

    Здравствуйте!
    Создал файл functions.php в дочерней теме и записал в нем несколько функций для расширения функционала темы.
    Сайт перестал работать, выходит какая-то непонятная мне фатальная ошибка.
    Удалил файл functions.php дочерней темы, преварительно перенес все добавки из него в functions.php родительской темы. Сайт стал нормально работать со всеми добавками. Сайт находится на Денвере.
    Объясните, пожалуйста, как правильно создать functions.php в дочерней теме, чтобы всё нормально работало?
    Спасибо.

    • Admin говорит:

      Возможно, изначально была ошибка а после переноса в другой файл исчезла?
      А если попробовать вставить в файл functions.php в папке дочерней темы
      что-нибудь совсем простое, в чем точно нет ошибки?

  2. Ridec7 говорит:

    здравствуйте.. у меня после создания дочерней темы все три колонки выстраиваются одна под другой.. тоесть получается одна колонка перекопировал все кроме functions.php пока ничего в него добавлять не хочу.. почему так случается? тема Pinboard

  3. Евгений говорит:

    Здравствуйте.
    Подскажите, пожалуйста.
    В моей теме при загрузке фото, создаются дубли этой фотографии с указанными размерами. Реализуется это в файле function.php с помощью следующего кода:
    ...
    // Thumbnail sizes
    add_image_size( 'thumb-small', 160, 160, true );
    add_image_size( 'thumb-medium', 520, 245, true );
    add_image_size( 'thumb-large', 720, 340, true );

    Что нужно прописать в файле function.php дочерней темы, чтобы не создавались дубли фотографии?

  4. Анастасия говорит:

    Опечатка в предложении: "Поскольку файл функций (functions.php) дочерней темы загружается позже файла функций родительской темы" - наоборот, раньше

  5. Yury говорит:

    Странно, добавляю простейшую функцию в дочерний functions.php и после этого белый экран на сайте (

    • Ann говорит:

      Yury, всё дело в том, что функции не должны дублироваться в файле functions.php дочерней темы. Белый экран у вас из-за того, что у вас в файле functions.php основной темы уже есть такая функция какую вы пытаетесь добавить в дочернюю.
      Лично у меня так и было: я добавила в файл functions.php дочерней темы функцию, описывающую меню "хлебные крошки", но при этом забыла удалить её из файла functions.php основной темы, и, разумеется при попытке активации дочерней темы у меня вышел лишь белый экран.
      Как только я удалила из файла функций основной темы дублирующую функцию, сразу всё заработало.

  6. Едиге говорит:

    добрый день!
    У меня есть готовый дочерний шаблон, никак не могу установить его!
    Помогите плииз!

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *