Дочерняя тема не перезаписывает style.css родительской темы

10 окт. 2014 г., 17:24:44
Просмотры: 49.1K
Голосов: 4

Я только что создал дочернюю тему, но любые изменения, которые я вношу в style.css, не перезаписывают style.css родительской темы - другие файлы работают. Я сделал следующее:

  1. Создал новую папку дочерней темы в директории тем
  2. Скопировал оригинальный style.css в неё
  3. Добавил в её заголовок "Template: orion"
  4. Выбрал и активировал мою дочернюю тему в настройках тем WordPress

И теперь, когда я меняю что-то в style.css дочерней темы... страница после изменений выглядит так же. Почему?

0
Все ответы на вопрос 4
8
13

Следует отметить, что таблица стилей дочерней темы загружается после стилей родительской темы, так что это не должно быть проблемой. Я думаю, что происходит следующее: вы пытаетесь изменить стили, которых нет в таблице стилей родительской темы, но которые находятся в других пользовательских таблицах стилей. Если это так, то ваши изменения не сработают, поскольку, скорее всего, таблица стилей вашей дочерней темы загружается раньше пользовательских таблиц стилей родительской темы.

Также важно отметить, что @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() для подключения скриптов и стилей из родительской темы, и не забывайте, что порядок загрузки стилей и скриптов здесь важен. Если скрипт/стиль зависит от другого, загружайте его после этого конкретного скрипта/стиля.

11 окт. 2014 г. 12:17:25
Комментарии

Хорошая идея обновить страницу Codex ;-)

birgire birgire
11 окт. 2014 г. 14:57:31

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

Pieter Goosen Pieter Goosen
11 окт. 2014 г. 15:00:42

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

Tara Tara
6 нояб. 2014 г. 23:09:56

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

Tara Tara
6 нояб. 2014 г. 23:12:06

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

Tara Tara
6 нояб. 2014 г. 23:16:10

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

Pieter Goosen Pieter Goosen
7 нояб. 2014 г. 06:36:31

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

Imran Subhani Imran Subhani
30 июн. 2015 г. 13:58:17

@Imran тебе стоит создать новый вопрос с этой проблемой :-)

Pieter Goosen Pieter Goosen
30 июн. 2015 г. 14:00:52
Показать остальные 3 комментариев
2

Убедитесь, что родительская тема не использует 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
*/

http://codex.wordpress.org/Child_Themes

10 окт. 2014 г. 17:58:18
Комментарии

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

birgire birgire
10 окт. 2014 г. 20:38:35

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

Brad Dalton Brad Dalton
9 нояб. 2014 г. 13:39:13
1

Я нашел эту тему, читая главу о дочерних темах в 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, или она затрагивает и другие темы (в таком случае это может быть проблемой в самой функции)...

Спасибо!

20 окт. 2014 г. 16:23:45
Комментарии

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

Pieter Goosen Pieter Goosen
7 нояб. 2014 г. 06:15:16
1

У меня была такая же проблема, я решил её, изменив разрешения папки дочерней темы и файлов внутри на 775. Возможно, это не самый безопасный способ, но у меня сработало. Дайте знать, если это поможет и вам :)

15 июн. 2017 г. 09:03:51
Комментарии

Боже. Даже представить не могу, какой уровень отчаяния мог привести тебя к этому. Это очень опасно. Я бы поискал какое-то другое решение или другую тему.

Tedinoz Tedinoz
13 сент. 2018 г. 03:25:19