Kontext
Ich habe ein Kinderthema basierend auf Twenty Thirteen erstellt, was sehr gut funktioniert. Nachdem ich das übergeordnete Thema auf Version 1.3 aktualisiert hatte, bemerkte ich ein merkwürdiges Verhalten mit dem Stil, das durch das zwischengespeicherte übergeordnete Thema verursacht wurde style.css
.
Hier ist der Inhalt des Themas meines Kindes style.css
(ohne Überschriften)
/* =Imports styles from the parent theme
-------------------------------------------------------------- */
@import url('../twentythirteen/style.css');
Das Kinderthema style.css
importiert also nur das Elternthema style.css
.
Ich habe auch eine andere CSS-Datei mit den Anpassungen meines Kinderthemas, die ich wie folgt einreihe 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);
Dies gibt mir eine sehr schöne CSS-URL domain.com/wp-content/themes/toutprettoutbon/css/main.css?ver=1.0.1
, die sicherstellt, dass das Stylesheet neu geladen wird, wenn das untergeordnete Thema aktualisiert wird.
Nun das Problem
Die Anweisung @import url('../twentythirteen/style.css');
ist völlig unabhängig von der Version des zugrunde liegenden übergeordneten Themas. Tatsächlich kann das übergeordnete Design aktualisiert werden, ohne dass das untergeordnete Design aktualisiert wird. Browser verwenden jedoch weiterhin zwischengespeicherte Versionen des alten Designs ../twentythirteen/style.css
.
Relevanter Code in Dreizehnundzwanzig, der Folgendes in die Warteschlange stellt 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' );
Ich kann mir ein paar Möglichkeiten vorstellen, um dieses Problem zu lösen, aber keine ist wirklich zufriedenstellend:
Aktualisieren Sie mein untergeordnetes Thema jedes Mal, wenn das übergeordnete Thema aktualisiert wird, um eine Versionszeichenfolge in
style.css
(z@import url('../twentythirteen/style.css?ver=NEW_VERSION');
. B. ) zu ändern . Dies schafft eine unnötige und ärgerliche Verbindung zwischen der übergeordneten Designversion und dem untergeordneten Design.In meinem Kind
functions.php
1)wp_dequeue_style
das enthaltene Kind-Themastyle.css
und 2)wp_enqueue_style
das Eltern- Themastyle.css
direkt mit Versionszeichenfolge. Dadurch wird die Reihenfolge der in die Warteschlange gestellten CSS-Dateien im übergeordneten Thema durcheinander gebracht.Verwenden Sie den
style_loader_tag
Filter, um das generierte CSS-<link>
Tag für zustyle.css
ändern, und ändern Sie den Pfad so, dass er direkt auf die WITH-Versionszeichenfolge des übergeordneten Themasstyle.css
verweist. Scheint für solch ein allgemeines Bedürfnis eher undurchsichtig (Cache-Busting).Gib das Thema
style.css
meiner Eltern in das meines Kindesstyle.css
. Wie (1), aber etwas schneller.style.css
Lassen Sie das Thema meines Kindes ein Symlink zum Thema des Elternteils seinstyle.css
. Das scheint ziemlich hackisch ...
Habe ich etwas verpasst Irgendwelche Vorschläge?
bearbeiten
Hinzugefügt genericicons.css
und ie.css
Stylesheets im übergeordneten Thema, um zu verdeutlichen, warum ich die @import
CSS-Anweisung wp_enqueue_style
in meinem untergeordneten Thema nicht ändern kann . Derzeit habe ich mit einer @import
Aussage in meinem Kinderthema style.css
diese Reihenfolge in generierten Seiten:
- Dreizehnundzwanzig / genericons / genericons.css -> Eingereiht nach übergeordnetem Thema
- child-theme / style.css -> nach übergeordnetem Thema in die Warteschlange gestellt, @imports twentythirteen / style.css
- einundzwanzig / css / ie.css -> nach übergeordnetem Thema in die Warteschlange gestellt
- child-theme / css / main.css -> nach untergeordnetem Thema in die Warteschlange gestellt
Wenn ich die Eltern style.css
als Abhängigkeit von in die Warteschlange einreihe main.css
, wird dies zu:
- Dreizehnundzwanzig / genericons / genericons.css -> Eingereiht nach übergeordnetem Thema
- child-theme / style.css -> leer, eingereiht nach übergeordnetem Thema
- einundzwanzig / css / ie.css -> nach übergeordnetem Thema in die Warteschlange gestellt
- twentythirteen / style.css -> nach untergeordnetem Thema als Abhängigkeit von main.css in die Warteschlange gestellt
- child-theme / css / main.css -> nach untergeordnetem Thema in die Warteschlange gestellt
Beachten Sie, dass ie.css jetzt vor dem übergeordneten Thema enthalten ist style.css
. Ich möchte die Reihenfolge der Warteschlangen in den CSS-Dateien des übergeordneten Themas nicht ändern, da ich nicht davon ausgehen kann, dass dies keine Probleme mit der Priorität der CSS-Regeln verursacht.
style.css
nicht an der Stelle eingefügt, an der es sich gerade befindet. Das übergeordnete Element enthält andere CSS-Dateien, die zwischen style.css
dem zugehörigen CSS und dem CSS meines untergeordneten Themas liegen müssen.
@import
, stattdessen das Stylesheet des übergeordneten Themas als Abhängigkeit von Ihrem eigenen Stylesheet festlegen .