In wp-settings.phpsucht WordPress zuerst nach Plugins, die unbedingt benötigt werden (Plugins im optionalen mu-pluginsOrdner) und lädt diese.
Wenn Sie dann eine Multisite-Installation ausführen, wird nach Plugins gesucht, die im Netzwerk aktiviert sind, und diese werden geladen.
Anschließend wird anhand des active_pluginsEintrags in der wp_optionsDatenbanktabelle nach allen anderen aktiven Plug-ins gesucht und diese durchlaufen. Die Plugins werden alphabetisch aufgelistet.
Die Sache ist, dass es normalerweise egal ist, in welcher Reihenfolge die einzelnen Plugins geladen werden, da ordnungsgemäß geschriebene Plugins WordPress-Hooks verwenden, mit denen Sie die Funktionalität später im WordPress-Start an bestimmten Stellen einbinden können. (Ordnungsgemäß geschriebene Plugins werden auch ihre Funktionen und Klassen voranstellen, damit es keine Konflikte gibt.)
Kommt total auf das Plugin an. WordPress lädt nur eine Datei in das Plugin, die normalerweise benannt ist the-plugin-name.phpund den Titel, die Beschreibung, den Autor usw. oben enthält. Es liegt an dem Plugin, den Rest seiner Dateien mit require_onceund wp_enqueue_scriptund so weiter zu laden.
Wenn ich also ein Plugin erstelle und später ein Add-On-Plugin freigebe, das ausgeführt werden soll, nachdem das ursprüngliche Plugin ausgeführt wurde, wie kann ich diese Reihenfolge sicherstellen?
Urok93
Es hängt wirklich davon ab, was Sie versuchen. Aber im Allgemeinen würden Sie jeden von ihnen so einrichten, dass er mit der Funktion add_action () auf einem bestimmten Hook ausgeführt wird, mit der Sie die Priorität festlegen können. codex.wordpress.org/Function_Reference/add_action
SeventhSteel
@SeventhSteel Aber was ist, wenn sich ein Plugin auf den Hook stützt, der von einem anderen Plugin erstellt wurde? Wenn ein Plugin verwendet apply_filters(), um einen Hook zu erstellen, aber vor einem Plugin ausgeführt wird, das verwendet wird add_filter(), funktioniert es dann immer noch? Logischerweise scheint das apply_filters()bereits ausgelöst worden zu sein, sodass die add_filter()Aufrufe im zweiten Plugin nichts bewirken. Ist es wichtig, in welcher Reihenfolge die Plugins geladen werden, wenn nur von Plugins erstellte Hooks verwendet werden?
Trusktr
Was zählt, ist, was im Laufe der Zeit geladen wurde apply_filters(). add_filter()muss vorher laufen apply_filters(). Befindet add_filter()sich das Plugin in einer Datei und nicht in einer anderen Funktion, wird es auf dem plugins_loadedHook ausgeführt, was normalerweise passieren wird, bevor Sie es benötigen apply_filters().
SeventhSteel
Ein häufiges Szenario besteht darin, dass mehrere Plug-ins ihren Inhalt anhängen. the_contentWie wird die Reihenfolge ihres Erscheinungsbilds festgelegt?
Dan Knauss
9
Ich finde es nützlich, eine Aktion zum späten Laden in mein Plugin aufzunehmen, die ausgeführt wird, nachdem alle Plugins ihren Ladevorgang folgendermaßen abgeschlossen haben:
add_action('plugins_loaded','my_late_loader');
Die Funktion my_late_loader wird dann nach allen anderen Plugins gestartet, wodurch ich Hooks, die von anderen Plugins definiert wurden, in meiner eigenen Funktion my_other_loader verwenden kann, die in my_late_loader gestartet wird
/**
* Late loading function for actions that must run after all plugins
* have loaded
*/function my_late_loader(){
add_action('some_hook','my_other_function',10,1);}
Es ist etwas kompliziert (ich weiß), aber dies stellt sicher, dass Hooks in anderen Plugins erstellt werden, bevor sie unabhängig von der Ladereihenfolge des Plugins hinzugefügt werden.
Antworten:
Antwort auf die erste Frage:
In
wp-settings.php
sucht WordPress zuerst nach Plugins, die unbedingt benötigt werden (Plugins im optionalenmu-plugins
Ordner) und lädt diese.Wenn Sie dann eine Multisite-Installation ausführen, wird nach Plugins gesucht, die im Netzwerk aktiviert sind, und diese werden geladen.
Anschließend wird anhand des
active_plugins
Eintrags in derwp_options
Datenbanktabelle nach allen anderen aktiven Plug-ins gesucht und diese durchlaufen. Die Plugins werden alphabetisch aufgelistet.Hier ist die Reihenfolge, in der WordPress so ziemlich alles lädt: http://codex.wordpress.org/Action_Reference#Actions_Run_During_a_Typical_Request
Die Sache ist, dass es normalerweise egal ist, in welcher Reihenfolge die einzelnen Plugins geladen werden, da ordnungsgemäß geschriebene Plugins WordPress-Hooks verwenden, mit denen Sie die Funktionalität später im WordPress-Start an bestimmten Stellen einbinden können. (Ordnungsgemäß geschriebene Plugins werden auch ihre Funktionen und Klassen voranstellen, damit es keine Konflikte gibt.)
Weitere Informationen zur Plugin-API: http://codex.wordpress.org/Plugin_API/
Antwort auf die zweite Frage:
Kommt total auf das Plugin an. WordPress lädt nur eine Datei in das Plugin, die normalerweise benannt ist
the-plugin-name.php
und den Titel, die Beschreibung, den Autor usw. oben enthält. Es liegt an dem Plugin, den Rest seiner Dateien mitrequire_once
undwp_enqueue_script
und so weiter zu laden.quelle
apply_filters()
, um einen Hook zu erstellen, aber vor einem Plugin ausgeführt wird, das verwendet wirdadd_filter()
, funktioniert es dann immer noch? Logischerweise scheint dasapply_filters()
bereits ausgelöst worden zu sein, sodass dieadd_filter()
Aufrufe im zweiten Plugin nichts bewirken. Ist es wichtig, in welcher Reihenfolge die Plugins geladen werden, wenn nur von Plugins erstellte Hooks verwendet werden?apply_filters()
.add_filter()
muss vorher laufenapply_filters()
. Befindetadd_filter()
sich das Plugin in einer Datei und nicht in einer anderen Funktion, wird es auf demplugins_loaded
Hook ausgeführt, was normalerweise passieren wird, bevor Sie es benötigenapply_filters()
.the_content
Wie wird die Reihenfolge ihres Erscheinungsbilds festgelegt?Ich finde es nützlich, eine Aktion zum späten Laden in mein Plugin aufzunehmen, die ausgeführt wird, nachdem alle Plugins ihren Ladevorgang folgendermaßen abgeschlossen haben:
Die Funktion my_late_loader wird dann nach allen anderen Plugins gestartet, wodurch ich Hooks, die von anderen Plugins definiert wurden, in meiner eigenen Funktion my_other_loader verwenden kann, die in my_late_loader gestartet wird
Es ist etwas kompliziert (ich weiß), aber dies stellt sicher, dass Hooks in anderen Plugins erstellt werden, bevor sie unabhängig von der Ladereihenfolge des Plugins hinzugefügt werden.
quelle