Entre functions.php (tema), widgets y plugins, ¿cuál se carga primero?

22 ago 2011, 10:50:17
Vistas: 43.9K
Votos: 96

El cliente pregunta si un plugin específico de carrusel que utiliza puede ser convertido en widget. Esto significa que debería crear un widget dentro de functions.php que llame a la función del plugin. Esto implica que el código del plugin debe cargarse primero para que la función esté disponible para WordPress cuando se cargue el archivo functions.php, ¿correcto? ¿Funcionaría esto?

3
Comentarios

Hola consulta para llamar una api externa en que parte de wordpress lo tendria que hacer? gracias

Nicolas Magnani Nicolas Magnani
25 nov 2020 01:51:47

Hola - has publicado esto como respuesta a una pregunta existente, cuando realmente es una nueva pregunta. ¿Podrías hacer esta pregunta como una nueva publicación por favor? Este sitio está en inglés pero también existe Stack Overflow en español.

Rup Rup
25 nov 2020 01:59:55

Pero la respuesta general que creo es que puedes llamar a una API externa desde cualquier parte de un plugin o tema. Generalmente deberías cachear la respuesta y evitar peticiones de larga duración si es posible. Si vuelves a hacer esta pregunta por favor proporciona más detalles sobre la API a la que estás llamando y lo que quieres hacer. ¡Gracias!

Rup Rup
25 nov 2020 02:01:10
Todas las respuestas a la pregunta 3
6
224

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

Descripción de la imagen aquí

Sin embargo, es incorrecto pensar en cualquiera de ellos como punto de ejecución de código. Para la mayoría de los casos, todo debería estar enganchado y ejecutarse no antes del hook init. Según el Codex, el registro de widgets con register_widget() debería engancharse a widget_init.

Debido a esto, el orden de carga no importa para este caso, ya que tendrás todo cargado para cuando el widget lo necesite en cualquier situación.

23 ago 2011 03:07:49
Comentarios

La carga del núcleo de WP nunca tendrá sentido.

gagarine gagarine
27 ago 2015 16:45:09

¿Hay alguna posibilidad de obtener un gráfico actualizado en 2016? ;-)

jgraup jgraup
10 ene 2016 17:04:18

@jgraup lo dices como si las cosas cambiaran en el núcleo de WordPress... :)

Rarst Rarst
10 ene 2016 23:19:39

@Rarst, touché ;-)

jgraup jgraup
10 ene 2016 23:27:12

Solo para asegurarme de que entiendo este gráfico - ¿Las secciones que se extienden a través de más de una de las 3 columnas principales son comunes a todas? ¿Así que estoy siguiendo una línea vertical hacia abajo y cruzando los eventos en orden cronológico para una solicitud dada?

Isaac Lubow Isaac Lubow
11 oct 2018 03:30:23

@IsaacLubow sí, las cosas que están en más de una columna corresponden a esos contextos respectivos, como puedes ver la misma parte significativa de la carga del núcleo siempre está involucrada para cualquier solicitud.

Rarst Rarst
15 oct 2018 14:13:54
Mostrar los 1 comentarios restantes
1
19

Un enfoque interesante sería listar todos los hooks en un archivo en orden 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
...
muchos más 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

Nota: la lista completa simplemente no cabría en el límite de 30.000 caracteres por publicación de WPSO, así que eliminé muchos action hooks.

Coloca el código anterior dentro de un plugin. Si lo haces desde el functions.php del tema, no capturarás plugins_loaded. Otra prueba más de que los plugins se cargan antes que el tema.

Los posibles beneficios de esta verificación son muchos, pero ten en cuenta que la salida será diferente para las distintas plantillas de página que llames, o si estás en el panel de administración.

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

Si no tienes ningún plugin activado, puedes colocar este código en la carpeta mu-plugins.

Podría ser mejor usar la API de WP FS, pero esta forma es realmente concisa.

24 dic 2016 19:22:46
Comentarios

En el área de administración (wp-admin), los plugins se cargan después del tema o en el orden de instalación... y en el front-end los plugins se cargan antes del tema...

Vishal Kumar Sahu Vishal Kumar Sahu
17 abr 2017 20:17:25
1

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

También, aquí hay una lista de acciones que se ejecutan durante una petición típica, en orden de ejecución. Los puntos #2 y #10 sugieren que los plugins se cargan primero; no estoy seguro acerca de functions.php.

23 ago 2011 02:35:01
Comentarios

Correcto, los plugins se cargan antes que los archivos del tema. Si el plugin incluye código, pero no el widget que deseas, es posible definir el widget en el functions.php de tu tema.

goldenapples goldenapples
23 ago 2011 02:47:27