In welcher Reihenfolge lädt WordPress Plugin-Dateien?


Antworten:


26

Antwort auf die erste Frage:

  1. In wp-settings.phpsucht WordPress zuerst nach Plugins, die unbedingt benötigt werden (Plugins im optionalen mu-pluginsOrdner) und lädt diese.

  2. Wenn Sie dann eine Multisite-Installation ausführen, wird nach Plugins gesucht, die im Netzwerk aktiviert sind, und diese werden geladen.

  3. 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.

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.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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.