Ich habe das Problem, dass ich die functions.php
Datei meines übergeordneten Themas laden muss, bevor die Datei meines untergeordneten Themas geladen wird functions.php
. Dies wird für das Setup & Init-Verfahren benötigt. Ich habe mir die Hooks in /wp_core_root/wp-settings.php (mit dem Namen :) angesehen do_action('setup_theme');
.
Das Problem ist, dass ich nicht weiß, wie ich mich dort einhängen soll, weil die erste Datei, die ich bekomme, die des untergeordneten Themas ist functions.php
, also wird keine add_action( 'setup_theme', 'my_init_function' );
funktionieren.
Bearbeiten:
a) Ich weiß, dass Plugins früher als das Thema geladen werden und daher auch auf die anfängliche Abfrage zugreifen können, aber ich möchte mich nicht auf ein Plugin verlassen.
b) Hier ist der Code (gekürzt) aus der Datei wp-settings.php
// happens a lot earlier:
do_action( 'plugins_loaded' );
// localize stuff happening here
do_action( 'setup_theme' );
// Load the functions for the active theme, for both parent and child theme if applicable.
if ( TEMPLATEPATH !== STYLESHEETPATH && file_exists( STYLESHEETPATH . '/functions.php' ) )
include( STYLESHEETPATH . '/functions.php' );
if ( file_exists( TEMPLATEPATH . '/functions.php' ) )
include( TEMPLATEPATH . '/functions.php' );
// first available hook, *after* functions.php was loaded
do_action( 'after_setup_theme' );
Ich möchte zwei Dinge vermeiden: Erstens viele Erklärungen für Benutzer. Zweitens die Möglichkeit, dass jemand etwas bricht, wenn das Seil durch versehentliches Löschen des Init-Verfahrens der Eltern durchtrennt. Die Leute sollen einfach in der functions.php spielen, ohne das Risiko einzugehen, etwas zu zerbrechen, ohne es zu wissen.
Mit anderen Worten: Wie halte ich die Datei "functions.php" meiner untergeordneten Themen sauber, aber habe ich den Bootstrap der übergeordneten Themen durchgeführt?
Irgendwelche Ideen? Danke vielmals!
functions.php
. Schauen Sie sich die "molto loko"wp-settings.php
-Datei im Kern an (Zeile: 275-279 @wp 3.1 rc) ... sieht so aus :if ( TEMPLATEPATH !== STYLESHEETPATH && file_exists( STYLESHEETPATH . '/functions.php' ) ) include( STYLESHEETPATH . '/functions.php' ); if ( file_exists( TEMPLATEPATH . '/functions.php' ) ) include( TEMPLATEPATH . '/functions.php' );
, also sehe ich keine Chance ... Und ich möchte sie nicht nutzen ein Plugin zum Bootstrap meines Themas.include(/path/to/parent/themes/functions.php)
oben in Ihre untergeordneten Themen functions.php einfügen , wird alles dort vorher geladen. Nicht?Antworten:
Justin Tadlock hat kürzlich einen großartigen Beitrag über das Erstellen einer besseren Datei functions.php geschrieben,
in dem er sich (wenn ich mich richtig erinnere) genau mit diesem Problem befasst.
Leider ist seine Seite momentan nicht verfügbar, so dass ich mich vorerst auf mein Gedächtnis verlassen muss.
Mit dem
after_setup_theme
Haken sind Sie auf dem richtigen Weg .Siehe Beispiel unten.
functions.php
Dateien.Ein bisschen Code mit mehr als tausend Wörtern - das übergeordnete Thema
function.php
sollte folgendermaßen aussehen:quelle
after_setup_theme
es zu spät ist, weil die functions.php-Dateien bereits geladen wurden.Erstens kannst du nicht. Die functions.php des untergeordneten Themas wird immer zuerst geladen, Punkt.
Zweitens können Themen nicht mit setup_theme verknüpft werden. Plugins können, aber das erste, woran sich ein Thema anschließen kann, ist after_setup_theme.
Wenn Ihr Elternteil richtig entworfen ist, kann das Kind Funktionen und Inhalte im Elternteil überschreiben, jedoch nur, wenn es zuerst geladen wird.
Wenn Sie der Meinung sind, dass Sie zuerst die Funktionsdatei der Eltern laden müssen, machen Sie das wahrscheinlich irgendwie falsch. Sie müssen das größere Problem erklären.
quelle
after_setup_theme
Hook nicht einfach ? Nur um den Hook nicht zu "spammen" oder weil er eher "enterprisy" oder "kool" ist? Ich meine: Ist die "Best Practice" -Idee hinter themenspezifischen Parallel-Hooks "Leave Core Hooks für Plugins"? (So gehe ich derzeit damit um.)Sie versuchen also, Code aus der Datei functions.php des Kindes auszuführen, aber nachdem das übergeordnete Thema geladen wurde. Einfach, verwenden Sie einfach eine benutzerdefinierte Aktion:
Am Ende von
parent/functions.php
:In
child/functions.php
:Alle übergeordneten Themen, die ihr Geld wert sind, tun dies auf diese Weise. Darüber hinaus gibt es mehrere andere Aktionen und Filter, die für das untergeordnete Thema verwendet werden können.
quelle
Warum fügen Sie die
functions.php
Datei des übergeordneten Themas nicht wie folgt in die Datei des untergeordneten Themas einfunctions.php
:In der
functions.php
Datei des untergeordneten Themas :Auf diese Weise wird die
functions.php
Datei des übergeordneten Themas nicht geändert (manchmal ist dies wichtig).quelle
Ich hatte zuvor ein ähnliches Problem und behebe es, indem ich eine zusätzliche leere "child-functions.php" im übergeordneten Element erstelle und direkt nach den Dateien / Funktionen, die ich im untergeordneten Element verwenden möchte, in "functions.php" (auch übergeordnetes Element) einfüge. dann erstelle ich im untergeordneten Thema eine "child-functions.php" -Datei und dort kann ich beginnen, die untergeordnete Funktion zu simulieren. Die Ausführung nach dem übergeordneten Element ist keine elegante Lösung, hat aber die Arbeit erledigt.
quelle