In quale ordine WordPress carica i file dei plugin?


21

In quale ordine vengono caricati i plugin in WordPress?

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


Puoi eseguire il debug in modo approfondito con questo plugin: https://wordpress.org/plugins/whats-running/ Elenca tutti i file richiesti in WordPress.
Szépe Viktor,

Risposte:


26

Risposta alla prima domanda:

  1. In wp-settings.php, WordPress controlla innanzitutto eventuali plug-in da utilizzare (plug-in nella mu-pluginscartella opzionale ) e li carica.

  2. Quindi, se stai eseguendo un'installazione multisito, verifica la presenza di plug-in attivati ​​dalla rete e li carica.

  3. Quindi controlla tutti gli altri plugin attivi osservando la active_pluginsvoce della wp_optionstabella del database e scorre quelli. I plugin saranno 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 fatto è che di solito non importa in quale ordine venga caricato ogni singolo plugin, perché i plugin scritti correttamente useranno hook di WordPress, che ti permetteranno di collegare funzionalità in punti specifici in seguito all'avvio di WordPress. (Anche i plugin scritti correttamente aggiungeranno il prefisso alle loro funzioni e classi in modo che non ci siano conflitti.)

Ulteriori informazioni sull'API del plug-in: 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 prende il nome the-plugin-name.phpe contiene il titolo, la descrizione, l'autore, ecc. In alto. E 'fino al plugin per caricare il resto dei suoi file, utilizzando require_onceed wp_enqueue_scripte quant'altro.


Quindi, se creo un plug-in, quindi rilascia un plug-in aggiuntivo che dovrebbe essere eseguito dopo l'esecuzione del plug-in originale, come posso garantire tale ordine?
urok93,

Dipende davvero da cosa stai cercando di fare. Ma in genere è possibile impostare ciascuno di essi per l'esecuzione su un hook specifico utilizzando la funzione add_action (), che consente di impostare la priorità. codex.wordpress.org/Function_Reference/add_action
SeventhSteel

@SeventhSteel Ma cosa succede se un plugin si basa sull'hook creato da un altro plugin. Se un plug-in viene utilizzato apply_filters()per creare un hook, ma viene eseguito prima di un plug-in che utilizza add_filter(), funzionerà comunque? Logicamente, sembra che apply_filters()sia già stato attivato, quindi le add_filter()chiamate nel secondo plugin non faranno nulla. È importante in quale ordine caricano i plugin quando usano solo hook creati da plugin?
trusktr,

Ciò che conta è ciò che è stato caricato col passare del tempo apply_filters(). add_filter()deve correre prima apply_filters(). Se si add_filter()trova in un file plug-in e non in un'altra funzione, verrà eseguito plugins_loadedall'hook che generalmente accadrà prima che tu ne abbia bisogno apply_filters().
SeventhSteel,

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

9

Trovo che sia utile includere un'azione di "caricamento in ritardo" 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 plug-in che mi consente di utilizzare hook definiti da altri plug-in nella mia funzione my_other_function che viene avviata in 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);
}

Bit contorto (lo so), ma questo assicura che gli hook in altri plugin vengano creati prima di essere aggiunti indipendentemente dall'ordine di caricamento del plugin.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.