¿Utiliza wp init hook para llamar a otros ganchos?

11

Quiero saber si es una buena práctica según el tema de WordPress o el desarrollo de complementos.

add_action('init','all_my_hooks');

function all_my_hooks(){

// some initialization stuff here and then

add_action('admin_init',-----);
add_action('admin_menu',----);

// more like so

}

Gracias

atinder
fuente

Respuestas:

16

En general: Sí, espere a que un enlace dedicado inicie su propio código. Nunca solo arroje una instancia de objeto al espacio de nombres global. Pero initrara vez es necesario.

Te enganchas lo más tarde posible. Si su primer código se ejecuta wp_head, no use un gancho anterior. Incluso puedes conectar ganchos en cascada :

add_action( 'wp_head', 'first_callback' );

function first_callback()
{
    // do something
    // then
    add_action( 'wp_footer', 'second_callback' );
}

Con respecto al initgancho: use en su wp_loadedlugar. Eso se ejecuta después inity después ms_site_check()se llamó. De esta forma, evita ejecutar su complemento en un sitio secundario no válido en una instalación de varios sitios. Todo lo demás es lo mismo.

fuxia
fuente
3
+1 para wp_loadedy MS info.
Kaiser
muchas gracias por su respuesta, todavía es una duda, ¿cuál es mejor cargar todos los otros ganchos dentro de wp_loaded o cargarlos por separado? Me pregunto si agrego ganchos en wp_loaded, ¿se engancharán antes en lugar de engancharse después de admin_init o admin_menu?
atinder
ganchos en cascada no es un problema?
atinder
No, ¿por qué debería ser? Llame al segundo gancho solo si el primero fue útil.
fuxia
3

No veo los grandes beneficios de esta práctica, por estos motivos:

Sus funciones de devolución de llamada no se llaman al registrarse

los add_actionadd_filter funciones y solo agregan una entrada a la variable global $wp_filterque contiene todos los filtros y acciones. Ver fuente . No llama a tu función. Su código se ejecutará solamente cuando el do_actiony apply_filtersse llama (nombre con gancho apropiado), que pasa muy tarde en el lugar donde los ganchos deben ser.

Se podría decir que al hacerlo, la variable global se hará $wp_filtermás grande => se requiere más memoria. Pero creo que crear una nueva función tiene el mismo problema.

Código de organización

Poner todo en una función te obliga a recordar todos los ganchos en cada archivo en tu tema / complemento. Usted no sería hacer algo como esto:

  • en header.php: agregar ganchos y funciones de devolución de llamada para que las cosas sucedan en el encabezado (como menú, registro de secuencia de comandos)
  • en content.php: agregar ganchos y funciones de devolución de llamada para filtrar contenido
  • admin-menu.php: agrega ganchos y funciones de devolución de llamada para agregar el menú de administración

(suponga que esos archivos se colocan en su tema / complemento)

En lugar de eso, tienes que:

  • poner solo funciones de devolución de llamada en header.php , content.php,admin-menu.php
  • y poner todos los ganchos en una función separada en otro archivo

=> Eso te hará difícil saber qué sucede cuando miras el contenido de header.php archivo. Debe buscar para saber cuándo se activan estas devoluciones de llamada.

Y piense en la situación cuando tiene varias clases en su tema / complemento. ¿Pones todos los ganchos de todas las clases en un solo lugar? ¿O cada clase tiene una función de contenedor que contiene todos los ganchos? ¡Es demasiado redundante!

Por encima de esta razón, creo que es un estilo personal :). Veo algunos marcos como Hybrid hace lo que dijiste. ¡A veces me resulta difícil cavar en esos marcos!

Anh Tran
fuente