Контекст
Я побудував дитячу тему на основі двадцяти тринадцяти, яка працює досить добре. Після оновлення батьківської теми до версії 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>тег 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, а встановлюйте таблицю стилів батьківської теми як залежність від вашого власного таблиці стилів .