Дочерняя тема не перезаписывает style.css родительской темы
Я только что создал дочернюю тему, но любые изменения, которые я вношу в style.css, не перезаписывают style.css родительской темы - другие файлы работают. Я сделал следующее:
- Создал новую папку дочерней темы в директории тем
- Скопировал оригинальный style.css в неё
- Добавил в её заголовок "Template: orion"
- Выбрал и активировал мою дочернюю тему в настройках тем WordPress
И теперь, когда я меняю что-то в style.css дочерней темы... страница после изменений выглядит так же. Почему?

Следует отметить, что таблица стилей дочерней темы загружается после стилей родительской темы, так что это не должно быть проблемой. Я думаю, что происходит следующее: вы пытаетесь изменить стили, которых нет в таблице стилей родительской темы, но которые находятся в других пользовательских таблицах стилей. Если это так, то ваши изменения не сработают, поскольку, скорее всего, таблица стилей вашей дочерней темы загружается раньше пользовательских таблиц стилей родительской темы.
Также важно отметить, что @import
не следует использовать для импорта таблицы стилей родительской темы. Правильный способ — подключить её с помощью wp_enqueue_style()
, привязанного к wp_enqueue_scripts
.
Вот как правильно подключить и добавить таблицу стилей родительской темы в дочернюю тему:
add_action( 'wp_enqueue_scripts', 'enqueue_parent_theme_style' );
function enqueue_parent_theme_style() {
wp_enqueue_style( 'parent-style', get_template_directory_uri().'/style.css' );
}
Из Codex, вот как должна выглядеть ваша таблица стилей:
/*
Theme Name: Twenty Fourteen Child
Theme URI: http://example.com/twenty-fourteen-child/
Description: Twenty Fourteen Child Theme
Author: John Doe
Author URI: http://example.com
Template: twentyfourteen
Version: 1.0.0
Tags: light, dark, two-columns, right-sidebar, responsive-layout, accessibility-ready
Text Domain: twenty-fourteen-child
*/
/* =Theme customization starts here
-------------------------------------------------------------- */
ПРИМЕЧАНИЕ
Я обновил Codex с этой информацией в этом посте.
ОБНОВЛЕНИЕ
Из комментария ниже:
Если родительская тема не использует wp_enqueue_style(), то как можно подключить style.css родительской темы, НЕ изменяя шаблоны родительской темы? Этот момент неясен в обновлённом Codex. Не могли бы вы уточнить с примером?
Хочу начать с того, что если вы автор темы, пожалуйста, НИКОГДА не добавляйте таблицы стилей или скрипты через теги <link>
в заголовке вашей темы. Это неправильный способ. Правильно подключайте и регистрируйте эти стили и скрипты через хук wp_enqueue_scripts
, как описано в Codex.
Честно говоря, я не думал, что до сих пор есть авторы тем, которые так делают. Пожалуй, лучший способ решить эту проблему — скопировать header.php родительской темы в вашу дочернюю тему и вручную удалить стили и скрипты из заголовка.
Затем вы можете продолжить и подключить их как обычно, используя wp_enqueue_scripts
, как в примере выше. Просто помните: используйте get_template_directory_uri()
для подключения скриптов и стилей из родительской темы, и не забывайте, что порядок загрузки стилей и скриптов здесь важен. Если скрипт/стиль зависит от другого, загружайте его после этого конкретного скрипта/стиля.

Спасибо, полностью согласен. Надеюсь, это поможет другим в будущем делать вещи немного лучше :-)

если родительская тема не использует wp_enqueue_style(), то как можно подключить parent style.css, не изменяя шаблоны родительской темы?

если родительская тема не использует wp_enqueue_style(), то как можно подключить style.css родительской темы, не изменяя шаблоны родительской темы. Как вы знаете, цель создания дочерней темы — не изменять шаблоны родительской темы.

@Pieter Goosen: Если родительская тема не использует wp_enqueue_style(), то как можно подключить style.css родительской темы, НЕ изменяя шаблоны родительской темы? Этот момент неясен в Codex, который вы обновили. Не могли бы вы пояснить с примером. Спасибо.

@Tara Спасибо, что подняли этот вопрос, честно говоря, я не думал, что люди до сих пор так делают. Пожалуйста, посмотрите мои правки в ответе.

@PieterGoosen Я использую тему, у которой есть разные версии, например, темная, светлая и т.д. Она добавляет пользовательскую таблицу стилей для этого. Мой вопрос - как переопределить её из дочерней темы?

Убедитесь, что родительская тема не использует wp_enqueue_style() в файле functions.php.
Если это так, вы также можете подключить таблицу стилей дочерней темы из её functions.php
add_action( 'wp_enqueue_scripts', 'load_my_child_styles', 20 );
function load_my_child_styles() {
wp_enqueue_style( 'child-style', get_stylesheet_directory_uri().'/style.css', array('twentyfourteen-style'), '1.0.0' );
}
Вот пример того, как должен выглядеть заголовок в файле style.css вашей дочерней темы
/*
Theme Name: Twenty Fourteen Child
Theme URI: http://example.com/twenty-fourteen-child/
Description: Дочерняя тема Twenty Fourteen
Author: John Doe
Author URI: http://example.com
Template: twentyfourteen
Version: 1.0.0
Tags: светлая, тёмная, две колонки, правый сайдбар, адаптивный дизайн, готова к доступности
Text Domain: twenty-fourteen-child
*/

Привет, хочу отметить, что использование @import
не рекомендуется, лучше подключить стили через enqueue. Смотрите, например, эту ветку.

@birgire Спасибо за обновление. Вот пост с альтернативным методом http://wordpress.stackexchange.com/a/167903/9884

Я нашел эту тему, читая главу о дочерних темах в WordPress Codex.
Я создал дочернюю тему на основе Simone (которая, в свою очередь, основана на _s underscores) и создал файл functions.php с рекомендуемым кодом:
<?php
add_action( 'wp_enqueue_scripts', 'enqueue_child_theme_styles', PHP_INT_MAX);
function enqueue_child_theme_styles() {
wp_enqueue_style( 'parent-style', get_template_directory_uri().'/style.css' );
wp_enqueue_style( 'child-style', get_stylesheet_uri(), array('parent-style') );
}
Однако использование этого метода создало проблему в моей дочерней теме. Я сообщил об этой проблеме на GitHub: ссылка. Решением было удаление константы PHP_INIT_MAX
из части add_action()
.
Интересно, это проблема, связанная именно с Simone, или она затрагивает и другие темы (в таком случае это может быть проблемой в самой функции)...
Спасибо!

Вам следовало задать это как вопрос. К сожалению, я только сейчас впервые увидел ваш пост. Эта проблема была поднята вчера и уже решена. Пожалуйста, ознакомьтесь с этим постом
