In che ordine WordPress carica i file dei plugin?

27 ago 2012, 00:28:41
Visualizzazioni: 39.2K
Voti: 30

In che ordine vengono caricati i plugin in WordPress?

E all'interno della cartella di un particolare plugin, quale ordine viene seguito per il caricamento?

1
Commenti

Puoi eseguire il debug in modo molto approfondito con questo plugin: https://wordpress.org/plugins/whats-running/ Elenca tutti i file necessari in WordPress.

Szépe Viktor Szépe Viktor
25 ott 2014 19:22:53
Tutte le risposte alla domanda 4
6
37

Risposta alla prima domanda:

  1. In wp-settings.php, WordPress controlla prima la presenza di eventuali plugin must-use (plugin nella cartella opzionale mu-plugins) e li carica.

  2. Poi, se stai utilizzando un'installazione multisite, controlla i plugin attivati a livello di rete e li carica.

  3. Infine controlla tutti gli altri plugin attivi cercando la voce active_plugins nella tabella del database wp_options, e li scorre uno per uno. I plugin verranno elencati in ordine alfabetico.

Ecco l'ordine in cui WordPress carica praticamente tutto: http://codex.wordpress.org/Action_Reference#Actions_Run_During_a_Typical_Request

Il punto è che di solito non importa in quale ordine viene caricato ogni singolo plugin, perché i plugin scritti correttamente utilizzano gli hook di WordPress, che ti permettono di inserire funzionalità in punti specifici successivi nell'avvio di WordPress. (I plugin scritti correttamente inoltre prefisseranno le loro funzioni e classi in modo da evitare conflitti.)

Maggiori informazioni sull'API dei plugin: http://codex.wordpress.org/Plugin_API/

Risposta alla seconda domanda:

Dipende totalmente dal plugin. WordPress carica solo un file nel plugin, quello che di solito si chiama the-plugin-name.php e contiene il titolo, la descrizione, l'autore, ecc. in cima. Spetta al plugin caricare il resto dei suoi file, utilizzando require_once e wp_enqueue_script e simili.

27 ago 2012 00:58:45
Commenti

Quindi, se creo un plugin e successivamente rilascio un plugin aggiuntivo che dovrebbe essere eseguito dopo il plugin originale, come posso assicurarmi che l'ordine sia corretto?

urok93 urok93
27 ago 2012 09:21:44

Dipende davvero da quello che stai cercando di fare. Ma in generale, dovresti impostare ciascuno di essi per essere eseguito su un hook specifico utilizzando la funzione add_action(), che ti permette di impostare la priorità. http://codex.wordpress.org/Function_Reference/add_action

SeventhSteel SeventhSteel
27 ago 2012 16:31:32

@SeventhSteel Ma cosa succede se un plugin dipende dall'hook creato da un altro plugin. Se un plugin utilizza apply_filters() per creare un hook, ma viene eseguito prima di un plugin che utilizza add_filter(), funzionerà comunque? Logicamente, sembra che apply_filters() sia già stato eseguito, quindi le chiamate add_filter() nel secondo plugin non faranno nulla. Ha importanza l'ordine in cui i plugin vengono caricati quando si utilizzano solo hook creati dai plugin?

trusktr trusktr
1 lug 2013 20:15:12

Ciò che conta è ciò che è stato caricato quando viene eseguito apply_filters(). add_filter() deve essere eseguito prima di apply_filters(). Se add_filter() si trova in un file di plugin e non in un'altra funzione, verrà eseguito sull'hook plugins_loaded, che generalmente avviene prima che tu abbia bisogno di apply_filters().

SeventhSteel SeventhSteel
21 nov 2014 19:28:20

Uno scenario comune è avere diversi plugin che aggiungono il loro contenuto dopo the_content -- come viene determinato l'ordine del loro aspetto?

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

E se stai usando una funzione globale che si trova in un'altra funzione? Non potresti usare quella funzione a meno che l'altro plugin non sia caricato per primo... Come risolveresti questo problema?

Philip Philip
11 lug 2023 19:42:42
Mostra i restanti 1 commenti
2
17

Trovo utile includere un'azione di 'caricamento tardivo' nel mio plugin che viene eseguita dopo che tutti i plugin hanno completato il loro caricamento, in questo modo:

add_action('plugins_loaded', 'my_late_loader');

La funzione my_late_loader viene quindi avviata dopo tutti gli altri plugin, il che mi permette di utilizzare hook definiti da altri plugin nella mia funzione my_other_function che viene avviata all'interno di my_late_loader

/**
 * Funzione di caricamento tardivo per azioni che devono essere eseguite 
 * dopo che tutti i plugin sono stati caricati
 */
function my_late_loader(){
    add_action( 'some_hook', 'my_other_function', 10, 1);
}

Un po' contorto (lo so), ma questo garantisce che gli hook negli altri plugin vengano creati prima di essere aggiunti, indipendentemente dall'ordine di caricamento dei plugin.

10 lug 2017 15:43:56
Commenti

Non esiste una cosa come "creare" un action/filter/hook, quindi non è necessario. Puoi chiamare add_filter() o add_action() in qualsiasi momento, e da quel momento in poi, qualsiasi chiamata a apply_filter() o do_action() con lo stesso nome risulterà nell'esecuzione della tua funzione.

Se lo usassi per eseguire un'azione o applicare un filtro sarebbe corretto, poiché in questo modo permetteresti ad altri plugin di registrare il loro interesse nei tuoi eventi.

fietserwin fietserwin
2 apr 2023 12:56:07

I filtri e le azioni vengono eseguiti in un ordine specifico, se vuoi che un'azione venga eseguita dopo tutte le altre allora questo approccio può essere utilizzato. Ovviamente puoi creare azioni e filtri. Non ho idea di cosa tu stia cercando di dire nel tuo commento.

Clinton Clinton
3 apr 2023 17:50:31
0

Sono arrivato originariamente a questa pagina con la stessa domanda del primo caso. Entrambe le risposte di @SeventhSteel e @Clinton forniscono dati molto utili, ma richiedono ulteriori approfondimenti. Come affermato in quelle risposte, il tuo plugin scritto correttamente utilizzerà hook, e avrà una chiamata simile alla seguente):

add_action('init', 'function_to_add');

Il primo parametro è "il nome dell'azione" a cui la tua funzione — il secondo parametro — è agganciata. L'azione specificata è il determinante principale di quando il tuo plugin viene caricato. C'è un terzo parametro opzionale (priorità) che ti dà un certo controllo granulare su dove all'interno di quel gruppo viene caricata la tua funzione. (Anche se questo è difficilmente preciso poiché spesso sarebbe difficile conoscere le priorità di tutti i plugin installati.) C'è un'eccellente lista di tutti gli action hook disponibili con relative spiegazioni per vari tipi di richiesta nel WordPress Codex.

Per quanto riguarda la seconda domanda, come affermato nella documentazione Plugin Basics:

Quando WordPress carica l'elenco dei plugin installati nella pagina Plugin dell'Admin di WordPress, cerca nella cartella dei plugin (e nelle sue sottocartelle) file PHP con commenti di intestazione del plugin WordPress.

Quindi il file nel tuo plugin con l'intestazione (secondo la documentazione, dovrebbe essercene solo uno) verrà caricato per primo. Vedi la risposta di @Clinton per suggerimenti su come gestire più hook all'interno di un singolo plugin.

Se sei arrivato a questa risposta (come ho fatto io) come sviluppatore di plugin WordPress alle prime armi, c'è molta altra informazione utile nel Plugin Handbook di WordPress.

30 set 2020 19:52:26
0

Riguardo alla dipendenza tra plugin, ho scoperto che il modo più semplice per controllare l'ordine in cui vengono caricati è racchiudere l'init con:

add_action('init', 'init_first', 11); nel file first_plugin.php

add_action('init', 'init_second', 12); nel file second_plugin.php

Quindi l'ordine effettivo di caricamento potrebbe essere ancora casuale, ma l'ordine di esecuzione sarà determinato dalla priorità che assegni.

Yaakov.

4 mag 2021 18:02:24