Контекст
Я побудував дитячу тему на основі двадцяти тринадцяти, яка працює досить добре. Після оновлення батьківської теми до версії 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>
тег css дляstyle.css
та змінити шлях до вказівки безпосередньо на батьківську темуstyle.css
З рядком версії. Здається, досить незрозумілою для такої загальної потреби (перебір кешу).Вивантажте батьківську тему
style.css
в моїй дочірній теміstyle.css
. Те саме, що (1) справді, але трохи швидше.Зробіть так, щоб тема моєї дитини
style.css
була символічним посиланням на батьківську темуstyle.css
. Це здається досить хакітським ...
Я щось пропустив? Будь-які пропозиції?
редагувати
Додано genericicons.css
та ie.css
таблиці стилів у батьківській темі, щоб уточнити, чому я не можу змінити @import
твердження css на wp_enqueue_style
тему моєї дитини. Наразі, із @import
заявою в моїй дочірній темі style.css
, я маю такий порядок на створених сторінках:
- двадцять тринадцять / genericons / genericons.css -> підкріплений батьківською темою
- child-topic / style.css -> підкріплений батьківською темою, @imports 20th /teen.css
- двадцять тринадцять / css / ie.css -> підкріплений батьківською темою
- child-тема / css / main.css -> підключена дочірньою темою
Якщо я заперечую батьківські style.css
залежності як залежність main.css
, це стане:
- двадцять тринадцять / genericons / genericons.css -> підкріплений батьківською темою
- child-topic / style.css -> порожній, зав'язаний батьківською темою
- двадцять тринадцять / css / ie.css -> підкріплений батьківською темою
- двадцять тридцять / style.css -> підкоряється дитячій темі як залежність від main.css
- child-тема / css / main.css -> підключена дочірньою темою
Зауважте, що ie.css тепер включений перед початковою темою style.css
. Я не хочу змінювати порядок заповнення файлів css батьківської теми, тому що не можу припустити, що це не спричинить проблем із пріоритетом правил css.
style.css
не міститиметься там, де зараз. Батько включає інші файли css, які повинні знаходитись між його style.css
та css моєї дочірньої теми.
@import
, а встановлюйте таблицю стилів батьківської теми як залежність від вашого власного таблиці стилів .