¿En qué orden carga WordPress los archivos de complemento?

21

¿En qué orden se cargan los complementos en WordPress?

Y dentro de la carpeta de un complemento en particular, ¿qué orden se sigue para cargar?

urok93
fuente
Puede depurar muy profundamente con este complemento: https://wordpress.org/plugins/whats-running/ Enumera todos los archivos necesarios en WordPress.
Szépe Viktor

Respuestas:

26

Respuesta a la primera pregunta:

  1. En wp-settings.phpWordPress, primero se comprueba si hay complementos obligatorios (complementos en la mu-pluginscarpeta opcional ) y los carga.

  2. Luego, si está ejecutando una instalación multisitio, busca complementos que estén activados por la red y los carga.

  3. Luego comprueba todos los demás complementos activos al observar la active_pluginsentrada de la wp_optionstabla de la base de datos y los recorre. Los complementos se enumerarán alfabéticamente.

Aquí está el orden en que WordPress carga casi todo: http://codex.wordpress.org/Action_Reference#Actions_Run_During_a_Typical_Request

La cuestión es que, por lo general, no importa en qué orden se cargue cada complemento individual, porque los complementos escritos correctamente usarán ganchos de WordPress, que le permiten conectar la funcionalidad en puntos específicos más adelante en el inicio de WordPress. (Los complementos escritos correctamente también prefijarán sus funciones y clases para que no haya conflictos).

Más información sobre el complemento API: http://codex.wordpress.org/Plugin_API/

Respuesta a la segunda pregunta:

Depende totalmente del complemento. WordPress solo carga un archivo en el complemento, el que generalmente se nombra the-plugin-name.phpy contiene el título, la descripción, el autor, etc.en la parte superior. Depende del complemento cargar el resto de sus archivos, usando require_oncey wp_enqueue_scripty otras cosas.

Séptimo Acero
fuente
Entonces, si creo un complemento, luego lanzo un complemento adicional que debería ejecutarse después de que se ejecute el complemento original, ¿cómo puedo asegurar ese orden?
urok93
Realmente depende de lo que intentes hacer. Pero en general, configuraría cada uno de ellos para que se ejecute en un gancho específico utilizando la función add_action (), que le permite establecer la prioridad. codex.wordpress.org/Function_Reference/add_action
SeventhSteel
@SeventhSteel Pero, ¿y si un complemento se basa en el gancho creado por otro complemento? Si un complemento se utiliza apply_filters()para crear un enlace, pero se ejecuta antes de un complemento que lo utiliza add_filter(), ¿funcionará? Lógicamente, parece que ya apply_filters()se habrá disparado, por lo que las add_filter()llamadas en el segundo complemento no harán nada. ¿Importa en qué orden se cargan los complementos cuando se usan solo ganchos creados por complementos?
trusktr 01 de
Lo que importa es lo que se ha cargado por el tiempo apply_filters()corre. add_filter()debe correr antes apply_filters(). Si add_filter()está en un archivo de complemento y no en otra función, se ejecutará en el plugins_loadedgancho que generalmente sucederá antes de que lo necesite apply_filters().
SeventhSteel
Un escenario común es tener varios complementos que agregan su contenido después the_content: ¿cómo se determina el orden de su aparición?
Dan Knauss el
9

Creo que es útil incluir una acción de 'carga tardía' en mi complemento que se ejecuta después de que todos los complementos hayan completado su carga de esta manera:

add_action('plugins_loaded', 'my_late_loader');

La función my_late_loader se inicia después de todos los demás complementos, lo que me permite usar ganchos definidos por otros complementos en mi propia función my_other_function que se inicia dentro de 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 enrevesado (lo sé), pero esto garantiza que se creen ganchos en otros complementos antes de agregarlos independientemente del orden de carga del complemento.

Clinton
fuente