it-swarm.com.de

wie stelle ich meine untergeordneten Stylesheets * nach * jedem übergeordneten Stylesheet/jeder übergeordneten Anweisung in a Warteschlange?

Ich verwende das gut geschriebene Oenology-Thema von Chip Bennett als Parent to my own Child-Thema.

In meinem Entwicklungsprozess habe ich festgestellt, dass Menschen, die Child-Themen schreiben, einige Herausforderungen haben, wenn es darum geht, Stile zu steuern.

Ich habe gerade festgestellt, dass meine Hauptdatei style.css vor jedem anderen Stylesheet-Link oder jeder anderen Anweisung in <head> geladen wird. Dies erklärt, warum ich einige der übergeordneten Stile nicht überschreiben konnte.

eine weitere Untersuchung des Problems zeigt, dass verschiedene übergeordnete Stylesheets und Stile an drei Stellen im <head> in die Warteschlange gestellt werden können. add_action('wp_print_styles',, add_action('wp_enqueue_scripts', und dann add_action('wp_head',.

um die Dinge einfach zu halten, plane ich, zwei Stylesheets zu erstellen. Das erste Haupt-Stylesheet 'style.css' enthält nur den Befehl @import url(), der zum Laden des Haupt-Stylesheets von Oenology erforderlich ist.

das zweite Stylesheet würde meine untergeordneten Regeln enthalten. Um sicherzustellen, dass es nach allen anderen Regeln geladen wird, stelle ich es mit add_action( 'wp_head', in die Warteschlange.

klingt das vernünftig oder gibt es eine bessere (korrektere) möglichkeit?

übrigens, weiß jemand was '/parent-theme/style.cssMRPreviewRefresh = 723' meint?

Aktualisieren

wp_enqueue_style () scheint in wp_head () nicht zu funktionieren.

prost,
Gregory

10
Gregory

die einzige Möglichkeit, um sicherzustellen, dass meine Styles das letzte Wort in der Kaskade haben, besteht darin, sie am Ende von <head> über den wp_head-Hook einzufügen. wp_enqueue funktioniert nicht in wp_head, daher musste ich den Link direkt wiederholen:

function gregory_enqueue_stylesheets() {
    $base = get_stylesheet_directory_uri();
    echo '<link rel="stylesheet" href="'.$base.'/style-gregory.css" type="text/css" media="all">';
    return;
}
add_action( 'wp_head', 'gregory_enqueue_stylesheets', 18 );

schließlich kann ich meine Stile relativ einfach und ohne hohe Spezifität oder die wichtige Regel festlegen, die nur als letzter Ausweg verwendet werden sollte.

WP benötigt ein besseres Stil-Warteschlangensystem. every style, ob ein Dateilink oder ein Inline-Style, sollte über denselben Hook übergeben werden, damit die Priorität ihre Reihenfolge bestimmen kann. Optional zu Debugging-Zwecken wäre es hilfreich, wenn der Hook auch die Prioritätswerte der einzelnen Stile möglicherweise in kommentierter Form ausgibt.

Aktualisieren

Ich konnte die Kontrolle über die Stile in meinem untergeordneten Thema behalten, während die ursprüngliche Kaskade des übergeordneten Themas beibehalten wurde (das ein Haupt-Stylesheet, ein Unter-Stylesheet und einige Stilanweisungen verwendet), indem mein Stylesheet in zwei geteilt wurde, wie in erläutert die Frage. Ich verwende nicht mehr den Hook wp_head (), sondern den richtigen und standardmäßigen Hook wp_enqueue_scripts () mit einer hohen Ordnungszahl, um sicherzustellen, dass mein Stylesheet zuletzt geladen wird.

standard-Stylesheet für das Thema "Mein Kind":

/*
Theme Name: Oenology-Gregory
Template: oenology
Version: 20120506-0026
*/

@import url("/wp-content/themes/oenology/style.css");

die Funktion, um mein Haupt-Stylesheet einzuordnen:

function gregory_enqueue_stylesheets() {
    $base = get_stylesheet_directory_uri();
    wp_enqueue_style( 'style-gregory', $base.'/style-gregory.css' );
    return;
}
add_action( 'wp_enqueue_scripts', 'gregory_enqueue_stylesheets', 18 );

es gibt jedoch einige WP-generierte Style-Anweisungen (dh nicht das übergeordnete Thema), die nach meinem Stylesheet angegeben sind, und ich muss mir ansehen, ob ich die Regeln, die mich betreffen, mit hochspezifischen CSS-Regeln überschreiben kann Suchen Sie nach Hooks, um sie zu deaktivieren, insbesondere nach der Regel body.custom-background.

vielen Dank für Ihre Kommentare.

prost,
Gregory

2
Gregory

Sie sollten immer verwenden wp_enqueue_style() , um Ihr Stylesheet zu laden, und diese Funktionen sollten mit wp_enqueue_scripts hook verknüpft sein, wobei im Kopf ausgeführt wird . Ich vermute, dass Sie es dort nicht angeschlossen haben, daher Ihr Problem. (Ab WP 3.3 gibt wp_enqueue_style() eine Benachrichtigung aus, wenn WP_Debug aktiviert ist.).

1
mrwweb