In diesem Beitrag werden einige Fragen aufgeworfen, die ich im Zusammenhang mit den jüngsten Änderungen in Bezug auf Stylesheet-Enqueueing-Methoden in diesem Thread und in diesem Thread gestellt habe .
Die Probleme, auf die ich gestoßen bin, sind in einem allgemeinen Anwendungsszenario aufgetreten, in dem ein weit verbreitetes und gut gepflegtes übergeordnetes Thema verwendet wurde, das speziell für untergeordnete Themen bei einer WP 4.0-Installation bereit ist. Mein Kind Thema des functions.php enthält nur die wp_enqueue_style
Funktion wie im Codex detailliert .
Bitte beachten Sie, dass der unten angegebene Code zwar spezifisch für dieses Thema ist, ein Großteil jedoch die aktuellen Codierungskonventionen verwendet, die von übergeordneten Themen verwendet werden. Darüber hinaus sind meine Problembereiche höchstwahrscheinlich auf eine große Anzahl etablierter übergeordneter Themen duplizierbar, die sich derzeit in freier Wildbahn befinden. Die von diesen aufgeworfenen Fragen sind auch universell anwendbar, unabhängig davon, welches übergeordnete Thema verwendet wird.
AUSGABE 1: Zwei Warteschlangen
Das empfohlene Setup:
Das übergeordnete Thema stellt Stile und Skripte mithilfe wp_enqueue_scripts
des Hooks in die Warteschlange, wobei der relevante Teil wie folgt lautet:
add_action('wp_enqueue_scripts', 'parent_theme_function_name');
function parent_theme_function_name() {
wp_register_style( 'avia-style' , $child_theme_url."/style.css", array(), '2', 'all' );
wp_enqueue_style( 'avia-base');
if($child_theme_url != $template_url) { wp_enqueue_style( 'avia-style'); }
}
Mein functions.php
untergeordnetes Thema stellt Stile gemäß den letzten Codexänderungen in die Warteschlange:
add_action( 'wp_enqueue_scripts', 'enqueue_parent_theme_style' );
function enqueue_parent_theme_style() {
wp_enqueue_style( 'dm-parent-style', get_template_directory_uri().'/style.css' );
}
Beachten Sie die folgenden IDs, die vom referenzierten Code verwendet werden:
id='dm-parent-style-css'
ist das Stylesheet des übergeordneten Themas, wie es von meiner untergeordneten Themenfunktion in die Warteschlange gestellt wirdid='avia-style-css'
ist das Stylesheet meines untergeordneten Themas, wie es von der übergeordneten Themenfunktion in die Warteschlange gestellt wirdid='dm-child-style-css'
ist das Stylesheet meines untergeordneten Themas, wie es von meiner untergeordneten Themenfunktion in die Warteschlange gestellt wird
Die Ergebnisse:
Auf den ersten Blick war alles in Ordnung, wobei das <head
> die folgende Reihenfolge anzeigt:
<link rel='stylesheet' id='dm-parent-style-css' href='testinstall.dev/wp-content/themes/enfold/style.css?ver=4.0' type='text/css' media='all' />
<!-- Multiple individual parent theme styles here -->
<link rel='stylesheet' id='avia-style-css' href='testinstall.dev/wp-content/themes/child-theme/style.css?ver=2' type='text/css' media='all' />
Nach der Installation eines Plugins hat sich die Reihenfolge der Warteschlangen nun wie folgt geändert:
<link rel='stylesheet' id='dm-parent-style-css' href='testinstall.dev/wp-content/themes/enfold/style.css?ver=4.0' type='text/css' media='all' />
<!-- Multiple individual parent theme styles here -->
<link rel='stylesheet' id='avia-style-css' href='testinstall.dev/wp-content/themes/child-theme/style.css?ver=2' type='text/css' media='all' />
<!-- Pesky plugin styles -->
Letztendlich muss das CSS meines untergeordneten Themas nach Plugins geladen werden, sodass ich gezwungen war, der Funktion in meinem untergeordneten Thema eine Prioritätsnummer hinzuzufügen (siehe vorherige Diskussion zur Prioritätsnummer) .
Denn nur meine Funktion reiht das CSS-Mutter Thema, jedoch ist das Ergebnis , dass jetzt die Mutter Thema CSS Ende bewegt wird, mein Kind Thema css in einer noch schlimmeren Notlage verlassen als zuvor.
<!-- Multiple individual parent theme styles here -->
<link rel='stylesheet' id='avia-style-css' href='testinstall.dev/wp-content/themes/child-theme/style.css?ver=2' type='text/css' media='all' />
<!-- Pesky plugin styles -->
<link rel='stylesheet' id='dm-parent-style-css' href='testinstall.dev/wp-content/themes/enfold/style.css?ver=4.0' type='text/css' media='all' />
Jetzt bin ich gezwungen, auch meinen untergeordneten Themenstil in die Warteschlange zu stellen, um sicherzustellen, dass er wieder an die Spitze der Zeile verschoben wird, was zu dem oben erwähnten Problem führt, dass das untergeordnete Thema CSS in die Warteschlange gestellt wird (neuer Begriff? Lol).
Das veraltete Setup:
Überarbeitete Funktion im untergeordneten Thema:
add_action( 'wp_enqueue_scripts', 'enqueue_parent_theme_style', 99 );
function enqueue_parent_theme_style() {
wp_enqueue_style( 'dm-parent-style', get_template_directory_uri().'/style.css' );
wp_enqueue_style( 'dm-child-style', get_stylesheet_directory_uri().'/style.css' );
}
Die Ergebnisse:
Herstellung der folgenden Bestellung in der <head>
:
<!-- Multiple individual parent theme styles here -->
<link rel='stylesheet' id='avia-style-css' href='testinstall.dev/wp-content/themes/child-theme/style.css?ver=2' type='text/css' media='all' />
<!-- Pesky plugin styles -->
<link rel='stylesheet' id='dm-parent-style-css' href='testinstall.dev/wp-content/themes/enfold/style.css?ver=4.0' type='text/css' media='all' />
<link rel='stylesheet' id='dm-child-style-css' href='testinstall.dev/wp-content/themes/child-theme/style.css?ver=2' type='text/css' media='all' />
Obwohl das Einfügen des untergeordneten Stylesheets in meine Funktion dazu führte, dass es zweimal in die Warteschlange gestellt wurde, ist IMHO der Codierung vorzuziehen, unter der Annahme, dass das übergeordnete Thema unser untergeordnetes Stylesheet für uns ordnungsgemäß in die Warteschlange stellt. Basierend auf den IDs, die jedem Stil in der Warteschlange zugewiesen sind, scheint es, dass das übergeordnete Thema ihn in die Warteschlange stellt, nicht irgendetwas in WP Core.
Mein Shivm:
Obwohl ich kaum vorschlagen würde, dass dies das empfohlene Mittel ist (und ich bin sicher, dass Entwickler mit mehr Programmiererfahrung als ich über diese Lösung stöhnen werden), habe ich die ID des übergeordneten Themas (die zum Einreihen des Stils meines untergeordneten Themas verwendet wird) direkt über meiner eigenen Warteschlange entfernt in der Funktionsdatei meines untergeordneten Themas wie gezeigt:
add_action( 'wp_enqueue_scripts', 'enqueue_parent_theme_style', 99 );
function enqueue_parent_theme_style() {
wp_enqueue_style( 'dm-parent-style', get_template_directory_uri().'/style.css' );
wp_dequeue_style( 'avia-style' );
wp_enqueue_style( 'dm-child-style', get_stylesheet_directory_uri().'/style.css' );
}
Die Ergebnisse:
Dies löste die vorliegenden Probleme und führte zu:
<!-- Multiple individual parent theme styles here -->
<!-- Plugin styles -->
<link rel='stylesheet' id='dm-parent-style-css' href='testinstall.dev/wp-content/themes/enfold/style.css?ver=4.0' type='text/css' media='all' />
<link rel='stylesheet' id='dm-child-style-css' href='testinstall.dev/wp-content/themes/child-theme/style.css?ver=2' type='text/css' media='all' />
Dies erforderte natürlich die Kenntnis der vom übergeordneten Thema verwendeten ID - etwas Allgemeineres wäre erforderlich, um als Standardmethode für die Entwicklung von untergeordneten Themen verwendet zu werden.
AUSGABE 2: Verschobene untergeordnete Stylesheets
(Es scheint schwer zu glauben, dass dies nicht in einem anderen Thread aufgetaucht ist, obwohl ich beim Anschauen keine bestimmten gesehen habe. Wenn ich es verpasst habe, können Sie mich gerne darauf aufmerksam machen.)
Ich verwende niemals die Standardeinstellung style.css
im Stammverzeichnis des untergeordneten Themas für meine Designstile - sie muss natürlich vorhanden sein, aber alle meine tatsächlichen Stile werden aus SCSS als minimierte CSS-Datei in einem Verzeichnis / css / kompiliert. Obwohl mir klar ist, dass dies nicht die "erwartete Norm" auf universeller Ebene für die Entwicklung von Kinderthemen ist, machen die meisten ernsthaften WordPress-Entwickler, die ich kenne, etwas Ähnliches. Dies erfordert natürlich das manuelle Einreihen dieses Stylesheets in meine Funktion, unabhängig davon, ob das übergeordnete Thema es in die Warteschlange gestellt hat oder nicht.
Um alles zusammenzufassen ...
- Ist es sicher, die Annahme aufzunehmen, dass übergeordnete Themen die untergeordneten Themenstile unter dem Gesichtspunkt der Standards für untergeordnete Themen ordnungsgemäß in die Warteschlange stellen?
- Das Entfernen der Priorität kann möglicherweise zu mehr Verwirrung in einem Teil der WordPress-Community führen, wenn untergeordnete Themenstile von einem Plugin überschrieben werden. Wir erwarten, dass Themen Stile überschreiben, aber nicht so sehr mit Plugins.
- Wenn Sie ein benutzerdefiniertes Stylesheet für die eigentlichen
style.css
untergeordneten Designstile verwenden (um sie in die vordefinierten zu setzen ), muss diese Datei manuell in die Warteschlange gestellt werden. Wäre es im Hinblick auf die Aufrechterhaltung der Kontinuität über ein breites Spektrum von Entwicklern nicht sinnvoll, das untergeordnete Stylesheet unabhängig vom möglichen Duplikat manuell in die Warteschlange zu stellen?