W jakiej kolejności WordPress ładuje pliki wtyczek?

21

W jakiej kolejności wtyczki są ładowane do WordPress?

A w jakim folderze wtyczki jest określona kolejność ładowania?

urok93
źródło
Możesz bardzo dokładnie debugować za pomocą tej wtyczki: https://wordpress.org/plugins/whats-running/ Zawiera listę wszystkich wymaganych plików w WordPress.
Szépe Viktor

Odpowiedzi:

26

Odpowiedź na pierwsze pytanie:

  1. W wp-settings.phpWordPress najpierw sprawdza wszelkie niezbędne wtyczki (wtyczki w opcjonalnym mu-pluginsfolderze) i ładuje je.

  2. Następnie, jeśli prowadzisz instalację wielostanowiskową, sprawdza ona wtyczki aktywowane przez sieć i ładuje je.

  3. Następnie sprawdza wszystkie pozostałe aktywne wtyczki, patrząc na active_pluginspozycję wp_optionstabeli bazy danych, i przegląda je. Wtyczki zostaną wyświetlone alfabetycznie.

Oto kolejność, w jakiej WordPress ładuje prawie wszystko: http://codex.wordpress.org/Action_Reference#Actions_Run_During_a_Typical_Request

Chodzi o to, że zazwyczaj nie ma znaczenia, w jakiej kolejności ładowana jest każda wtyczka, ponieważ poprawnie napisane wtyczki będą korzystały z haków WordPress, które pozwalają podłączyć funkcjonalność do określonych punktów później podczas uruchamiania WordPress. (Prawidłowo napisane wtyczki będą również poprzedzać ich funkcje i klasy, aby nie było żadnych konfliktów).

Więcej informacji na temat API wtyczek: http://codex.wordpress.org/Plugin_API/

Odpowiedź na drugie pytanie:

Całkowicie zależy od wtyczki. WordPress ładuje tylko jeden plik do wtyczki, ten, który jest zwykle nazywany the-plugin-name.phpi zawiera tytuł, opis, autora itp. U góry. To do wtyczki, aby załadować resztę swoich plików za pomocą require_oncei wp_enqueue_scripti etażerka.

SeventhSteel
źródło
Więc jeśli utworzę wtyczkę, to później wypuszczę wtyczki dodatków, które powinny działać po uruchomieniu oryginalnej wtyczki, jak mogę zapewnić tę kolejność?
urok93
To naprawdę zależy od tego, co próbujesz zrobić. Ogólnie rzecz biorąc, każdy z nich można ustawić tak, aby działał na określonym haku za pomocą funkcji add_action (), która pozwala ustawić priorytet. codex.wordpress.org/Function_Reference/add_action
SeventhSteel
@SeventhSteel Ale co, jeśli wtyczka polega na haku utworzonym przez inną wtyczkę. Jeśli jedna wtyczka używa apply_filters()do utworzenia haka, ale działa przed wtyczką, która używa add_filter(), to czy nadal będzie działać? Logicznie wydaje się, że apply_filters()już wystartował, więc add_filter()wywołania w drugiej wtyczce nic nie zrobią. Czy ma znaczenie kolejność ładowania wtyczek przy użyciu tylko haków utworzonych przez wtyczki?
trusktr
Liczy się to, co załadował czas apply_filters(). add_filter()musi biec wcześniej apply_filters(). Jeśli add_filter()znajduje się w pliku wtyczki, a nie w innej funkcji, uruchomi się on na plugins_loadedzawieszeniu, co na ogół nastąpi zanim będzie to potrzebne apply_filters().
SeventhSteel
Częstym scenariuszem jest posiadanie kilku wtyczek, które dołączają ich treść po the_content- jak ustala się kolejność ich wyglądu?
Dan Knauss
9

Uważam, że użyteczne jest włączenie w mojej wtyczce działania polegającego na „późnym ładowaniu”, które jest uruchamiane po zakończeniu ładowania wszystkich wtyczek w następujący sposób:

add_action('plugins_loaded', 'my_late_loader');

Funkcja my_late_loader jest następnie inicjowana po wszystkich innych wtyczkach, co pozwala mi korzystać z haków zdefiniowanych przez inne wtyczki w mojej własnej funkcji my_other_function, która jest inicjowana w my_late_loader

/**
 * 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);
}

Trochę zawiłe (wiem), ale zapewnia to, że zaczepy w innych wtyczkach są tworzone przed dodaniem, niezależnie od kolejności ładowania wtyczek.

Clinton
źródło