Entre funciones.php, widgets y complementos, ¿cuál se carga primero?

74

El cliente pregunta si un complemento de carrusel específico que utiliza puede ser widgetizado. Eso significa que debo crear un widget dentro de functions.php que llame a la función del complemento. Eso significa que el código del complemento debe cargarse primero para que la función esté disponible para WordPress cuando se cargue el archivo functions.php, ¿verdad? ¿Funcionaría?

    
pregunta pixeline 22.08.2011 - 09:50

3 respuestas

170

Los complementos se cargan justo antes del tema (sí, he estado buscando una excusa para usar esto):

Sinembargo,eserróneopensarcomopuntodeejecucióndecódigo.Paralamayoríadeloscasos,tododebeestarenganchadoyejecutadonoantesdeinithook.DeacuerdoconelwidgetdeCodex,elregistrocon register_widget() debe estar conectado a widget_init .

Debido a que el orden de carga no es importante para este caso, tendrá todo lo que cargue cuando el widget lo necesite en cualquier caso.

    
respondido por el Rarst 23.08.2011 - 02:07
11

Un enfoque interesante sería enumerar todos los enlaces a un archivo en una secuencia de ejecución.

add_action( 'all', '_20161224_printer' );
function _20161224_printer( $r ){

    $line =  microtime(true)*10000 . ' ' . $r .  "\n";
    $fp = fopen( ABSPATH . 'hooks.txt', 'a+');
    fwrite($fp, $line);
    fclose($fp);

}

Y obtendrás una salida como esta:

14825992300742 pre_option_blog_charset
14825992300743 option_blog_charset
14825992300743 plugins_loaded
14825992300744 load_default_widgets
14825992300745 load_default_embeds
14825992300745 wp_audio_extensions
14825992300745 wp_audio_embed_handler
14825992300746 wp_video_extensions
14825992300746 wp_video_embed_handler
14825992300746 sanitize_comment_cookies
14825992300747 pre_option_permalink_structure
14825992300747 option_permalink_structure
14825992300748 pre_option_wp_user_roles
14825992300748 option_wp_user_roles
14825992300749 wp_roles_init
14825992300749 setup_theme
14825992300749 pre_option_template
14825992300750 option_template
14825992300750 template
14825992300750 theme_root
14825992300751 template_directory
14825992300751 pre_option_stylesheet
14825992300751 option_stylesheet
14825992300751 stylesheet
14825992300752 theme_root
14825992300752 stylesheet_directory
14825992300752 pre_option_WPLANG
14825992300753 query
14825992300754 default_option_WPLANG
14825992300755 locale
14825992300755 override_unload_textdomain
14825992300755 unload_textdomain
14825992300755 override_load_textdomain
14825992300756 load_textdomain
14825992300756 load_textdomain_mofile
14825992300756 locale
...
many many more action hooks
...
14825992302886 wp_parse_str
14825992302886 nonce_life
14825992302886 salt
14825992302886 wp_parse_str
14825992302887 esc_html
14825992302887 logout_url
14825992302887 clean_url
14825992302887 gettext
14825992302887 wp_after_admin_bar_render
14825992302888 pre_option_template
14825992302888 option_template
14825992302888 template
14825992302888 theme_root
14825992302888 template_directory
14825992302889 parent_theme_file_path
14825992302889 shutdown
  

Tenga en cuenta que la lista completa simplemente no podría ajustarse a la limitación de 30.000 caracteres por publicación de WPSO, así que eliminé muchos ganchos de acción.

     

Coloque el código anterior dentro de un complemento. Si lo haces desde los temas functions.php no captarás plugins_loaded . Otra prueba de que los complementos se cargan antes que el tema.

Los posibles beneficios de esta revisión son muchos, pero tenga en cuenta que la salida será diferente para las diferentes plantillas de página a las que llamará o si se encuentra en un panel de control.

Simplemente lo llamé desde /?p=1 o la página de Hello World.

Si no tiene un solo complemento activado, puede colocar este código en la carpeta mu-plugins .

Puede ser mejor usar API de WP FS , pero esta forma es realmente concisa.

    
respondido por el prosti 24.12.2016 - 18:22
3

Puedes tener un widget dentro del archivo .php del complemento (y tener una variable global compartida que ambos pueden usar), si eso es lo que estás preguntando. Aquí hay un tutorial con código de ejemplo Me encontré hace un tiempo.

También, aquí hay una lista de acciones ejecutadas durante una solicitud típica , en orden de ejecución. # 2 y # 10 sugieren que los complementos se cargan primero; No estoy seguro acerca de functions.php.

    
respondido por el montrealist 23.08.2011 - 01:35

Lea otras preguntas en las etiquetas