W jakiej kolejności WordPress ładuje pliki wtyczek?


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.