контекст
Я построил детскую тему, основанную на Двадцать тринадцать, которая работает довольно хорошо. После обновления родительской темы до версии 1.3 я заметил странное поведение со стилем, вызванным кэшированной родительской темой style.css
.
Вот содержание моей дочерней темы style.css
(без заголовков)
/* =Imports styles from the parent theme
-------------------------------------------------------------- */
@import url('../twentythirteen/style.css');
Таким образом, дочерняя тема не style.css
делает ничего, кроме импорта родительской темы style.css
.
У меня также есть другой файл css с настройками моей дочерней темы, который я ставлю в очередь следующим образом functions.php
:
// Enqueue parent theme's style.css (faster than using @import in our style.css)
$themeVersion = wp_get_theme()->get('Version');
// Enqueue child theme customizations
wp_enqueue_style('child_main', get_stylesheet_directory_uri() . '/css/main.css',
null, $themeVersion);
Это дает мне очень хороший URL-адрес CSS, как это: он domain.com/wp-content/themes/toutprettoutbon/css/main.css?ver=1.0.1
гарантирует, что таблица стилей перезагружается при обновлении дочерней темы.
Теперь проблема
Заявление @import url('../twentythirteen/style.css');
полностью не зависит от версии основной родительской темы. Фактически, родительская тема может быть обновлена без обновления дочерней темы, но браузеры будут по-прежнему использовать старые версии, сохраненные в кэше ../twentythirteen/style.css
.
Соответствующий код в Двадцать тринадцать, который ставит в очередь style.css
:
function twentythirteen_scripts_styles() {
// ...
// Add Genericons font, used in the main stylesheet.
wp_enqueue_style( 'genericons', get_template_directory_uri() . '/genericons/genericons.css', array(), '3.03' );
// Loads our main stylesheet.
wp_enqueue_style( 'twentythirteen-style', get_stylesheet_uri(), array(), '2013-07-18' );
// Note usage of get_stylesheet_uri() which actually enqueues child-theme/style.css
// Loads the Internet Explorer specific stylesheet.
wp_enqueue_style( 'twentythirteen-ie', get_template_directory_uri() . '/css/ie.css', array( 'twentythirteen-style' ), '2013-07-18' );
}
add_action( 'wp_enqueue_scripts', 'twentythirteen_scripts_styles' );
Я могу придумать несколько способов решения этой проблемы, но ни один из них не является действительно удовлетворительным:
Обновляйте мою дочернюю тему каждый раз, когда обновляется родительская тема, чтобы изменить строку версии в
style.css
(например@import url('../twentythirteen/style.css?ver=NEW_VERSION');
). Это создает ненужную и раздражающую связь между версией родительской темы и дочерней.В моем ребенке
functions.php
, 1)wp_dequeue_style
включенный ребенок ТЕМАstyle.css
и 2) родительская тема это непосредственна строка версии. Это портит порядок очереди CSS в родительской теме.wp_enqueue_style
style.css
Используйте
style_loader_tag
фильтр, чтобы изменить сгенерированный<link>
тег cssstyle.css
и изменить путь так, чтобы он указывал непосредственно на строку WITH версии родительской темыstyle.css
. Кажется довольно неясным для такой распространенной необходимости (перебора кеша).Дамп родительской темы
style.css
в моей дочерней темеstyle.css
. То же, что (1) на самом деле, но немного быстрее.Сделайте мою дочернюю тему
style.css
символической ссылкой на родительскую темуstyle.css
. Это кажется довольно хакерским ...
Я что-то пропустил? Какие-либо предложения?
редактировать
Добавлены genericicons.css
и ie.css
таблицы стилей в родительской теме , чтобы выяснить , почему я не могу изменить @import
заявление CSS , чтобы wp_enqueue_style
в моей детской теме. В настоящее время с @import
заявлением в моей дочерней теме style.css
, у меня есть этот порядок на сгенерированных страницах:
- fiftythirteen / genericons / genericons.css -> в родительской теме
- child-theme / style.css -> добавленный в родительскую тему, @imports fiftythirteen / style.css
- двадцать тринадцать / css / ie.css -> в родительской теме
- child-theme / css / main.css -> добавлена в дочернюю тему
Если я поставлю родителей style.css
в зависимость main.css
, это станет:
- fiftythirteen / genericons / genericons.css -> в родительской теме
- child-theme / style.css -> пусто, поставлено в очередь родительской темой
- двадцать тринадцать / css / ie.css -> в родительской теме
- fiftythirteen / style.css -> добавлена в дочернюю тему как зависимость от main.css
- child-theme / css / main.css -> добавлена в дочернюю тему
Обратите внимание, что ie.css теперь включен перед темой родительской темы style.css
. Я не хочу менять порядок постановки в очередь css-файлов родительской темы, потому что не могу предположить, что это не вызовет проблем с приоритетом правил css.
style.css
не будет включена в то же место, что и сейчас. Родитель включает в себя другие файлы CSS, которые должны находиться между его style.css
и моей дочерней темой CSS.
@import
, вместо этого установите таблицу стилей родительской темы как зависимость от вашей собственной таблицы стилей .