În ce ordine încarcă WordPress fișierele plugin-urilor?

27 aug. 2012, 00:28:41
Vizualizări: 39.2K
Voturi: 30

În ce ordine sunt încărcate plugin-urile în WordPress?

Și în cadrul unui folder specific al unui plugin, ce ordine este urmată pentru încărcare?

1
Comentarii

Poți să faci depanare foarte detaliată cu acest plugin: https://wordpress.org/plugins/whats-running/ Acesta listează toate fișierele necesare în WordPress.

Szépe Viktor Szépe Viktor
25 oct. 2014 19:22:53
Toate răspunsurile la întrebare 4
6
37

Răspuns la prima întrebare:

  1. În wp-settings.php, WordPress verifică mai întâi dacă există pluginuri must-use (pluginuri în folderul opțional mu-plugins) și le încarcă pe acelea.

  2. Apoi, dacă rulează o instalație multisite, verifică pluginurile activate la nivel de rețea și le încarcă pe acelea.

  3. Apoi verifică toate celelalte pluginuri active căutând înregistrarea active_plugins din tabelul de bază de date wp_options și parcurge acele pluginuri. Pluginurile vor fi listate în ordine alfabetică.

Iată ordinea în care WordPress încarcă aproape totul: http://codex.wordpress.org/Action_Reference#Actions_Run_During_a_Typical_Request

Lucrul important este că de obicei nu contează în ce ordine este încărcat fiecare plugin individual, deoarece pluginurile bine scrise vor folosi hook-uri WordPress, care vă permit să conectați funcționalități în puncte specifice ulterioare din inițializarea WordPress. (Pluginurile bine scrise vor folosi și prefixe pentru funcțiile și clasele lor pentru a evita conflictele.)

Mai multe informații despre API-ul de pluginuri: http://codex.wordpress.org/Plugin_API/

Răspuns la a doua întrebare:

Depinde în totalitate de plugin. WordPress încarcă doar un singur fișier din plugin, cel care este de obicei numit the-plugin-name.php și conține titlul, descrierea, autorul etc. în partea de sus. Este responsabilitatea pluginului să încarce restul fișierelor sale, folosind require_once și wp_enqueue_script și altele asemenea.

27 aug. 2012 00:58:45
Comentarii

Deci dacă creez un plugin, iar mai târziu lansez un plugin add-on care ar trebui să ruleze după ce plugin-ul original a fost executat, cum pot asigura această ordine?

urok93 urok93
27 aug. 2012 09:21:44

Depinde foarte mult de ce încerci să realizezi. În general, ai putea configura fiecare dintre ele să ruleze pe un anumit hook folosind funcția add_action(), care îți permite să setezi prioritatea. http://codex.wordpress.org/Function_Reference/add_action

SeventhSteel SeventhSteel
27 aug. 2012 16:31:32

@SeventhSteel Dar dacă un plugin se bazează pe hook-ul creat de alt plugin. Dacă un plugin folosește apply_filters() pentru a crea un hook, dar rulează înaintea unui plugin care folosește add_filter(), atunci va funcționa totuși? Logic, se pare că apply_filters() ar fi fost deja declanșat, așa că apelurile add_filter() din al doilea plugin nu vor face nimic. Contează ordinea în care plugin-urile se încarcă atunci când folosești doar hook-uri create de plugin-uri?

trusktr trusktr
1 iul. 2013 20:15:12

Important este ce s-a încărcat până când rulează apply_filters(). add_filter() trebuie să ruleze înainte de apply_filters(). Dacă add_filter() se află într-un fișier de plugin și nu în altă funcție, acesta va rula pe hook-ul plugins_loaded, care în general se va întâmpla înainte să aveți nevoie de apply_filters().

SeventhSteel SeventhSteel
21 nov. 2014 19:28:20

Un scenariu comun este atunci când aveți mai multe plugin-uri care adaugă conținutul lor după the_content -- cum este determinată ordinea în care acestea apar?

Dan Knauss Dan Knauss
23 mar. 2017 18:12:47

dar dacă utilizați o funcție globală care se află în altă funcție? Nu ați putea utiliza acea funcție decât dacă celălalt plugin este încărcat mai întâi... Cum ați rezolva această problemă?

Philip Philip
11 iul. 2023 19:42:42
Arată celelalte 1 comentarii
2
17

Consider utilă includerea unei acțiuni de 'încărcare întârziată' în plugin-ul meu care rulează după ce toate plugin-urile și-au finalizat încărcarea, astfel:

add_action('plugins_loaded', 'my_late_loader');

Funcția my_late_loader este inițializată după toate celelalte plugin-uri, ceea ce îmi permite să folosesc hook-uri definite de alte plugin-uri în propria mea funcție my_other_function, care este inițializată în interiorul my_late_loader.

/**
 * Funcție de încărcare întârziată pentru acțiuni care trebuie să ruleze după încărcarea 
 * tuturor plugin-urilor
 */
function my_late_loader(){
    add_action( 'some_hook', 'my_other_function', 10, 1);
}

Puțin încâlcit (știu), dar acest lucru asigură că hook-urile din alte plugin-uri sunt create înainte de a fi adăugate, indiferent de ordinea de încărcare a plugin-urilor.

10 iul. 2017 15:43:56
Comentarii

Nu există un concept de a crea un action/filter/hook, așa că acest lucru nu este necesar. Puteți apela add_filter() sau add_action() în orice moment, iar începând cu acel moment, orice apel la apply_filter() sau do_action() care folosește același nume va duce la executarea funcției dumneavoastră.

Dacă ați folosi acest lucru pentru a executa o acțiune sau a aplica un filtru, atunci ar fi corect, deoarece astfel ați permis altor plugin-uri să se înregistreze pentru evenimentele dumneavoastră.

fietserwin fietserwin
2 apr. 2023 12:56:07

Filtrele și acțiunile rulează într-o anumită ordine. Dacă doriți ca o acțiune să ruleze după toate celelalte acțiuni, atunci această abordare poate fi folosită. Desigur, puteți crea acțiuni și filtre. Nu am nicio idee ce încercați să spuneți în comentariul dumneavoastră.

Clinton Clinton
3 apr. 2023 17:50:31
0

Am ajuns inițial pe această pagină cu aceeași întrebare ca și cea primul utilizator. Ambele răspunsuri oferite de @SeventhSteel și @Clinton conțin informații foarte utile, dar necesită o analiză suplimentară. După cum se menționează în aceste răspunsuri, un plugin bine scris va folosi hook-uri și va avea un apel similar cu următorul:

add_action('init', 'function_to_add');

Primul parametru reprezintă "numele acțiunii" la care funcția ta – al doilea parametru – este conectată. Acțiunea specificată este principalul factor care determină momentul în care plugin-ul tău este încărcat. Există un al treilea parametru opțional (prioritate) care oferă un anumit control asupra locului în care funcția ta este încărcată în cadrul acelui grup. (Deși acest lucru nu este foarte precis, deoarece adesea ar fi dificil să cunoști prioritățile tuturor plugin-urilor instalate.) Există o listă excelentă a tuturor hook-urilor de acțiune disponibile cu explicații pentru diferite tipuri de cereri în WordPress Codex.

În ceea ce privește a doua întrebare, după cum se menționează în documentația Plugin Basics:

Când WordPress încarcă lista de plugin-uri instalate pe pagina de Plugin-uri din Adminul WordPress, caută în folderul de plugin-uri (și subfolderele acestuia) pentru a găsi fișiere PHP cu comentarii de antet pentru plugin-uri WordPress.

Deci, fișierul din plugin-ul tău care conține antetul (conform documentației, ar trebui să fie doar unul) va fi încărcat primul. Vezi răspunsul lui @Clinton pentru sugestii despre gestionarea mai multor hook-uri într-un singur plugin.

Dacă ai ajuns la acest răspuns (ca și mine) ca dezvoltator de plugin-uri WordPress pentru prima dată, găsești mult mai multe informații utile în Manualul de Plugin-uri WordPress.

30 sept. 2020 19:52:26
0

În legătură cu dependența dintre plugin-uri, am constatat că cea mai ușoară modalitate de a controla ordinea în care se încarcă este prin înfășurarea init cu:

add_action('init', 'init_first', 11); în first_plugin.php

add_action('init', 'init_second', 12); în second_plugin.php

Astfel, ordinea reală în care se încarcă poate fi încă aleatorie, dar ordinea în care rulează va fi determinată de prioritatea pe care o dai.

Yaakov.

4 mai 2021 18:02:24