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