Diferencia entre do_action y add_action

20

Esta pregunta puede estar equivocada, no estoy seguro. Porque no tengo claro esto.

add_actionque está acostumbrado a enganchar nuestra función a la función especificada. Por ejemplo, add_action('wp_head'.'myfunc');ahora cualquier código myfuncque se ejecute en el archivo wp_head(). Esto está claro pero tengo dudas sobre do_actionlo que hace.

Creo que se usa para crear nuestro propio gancho como ganchos ya disponibles (wp_head, wp_footer, etc.). Si estoy en lo correcto, ¿alguien puede mostrarme una respuesta simple y comprensible con un ejemplo simple?

He intentado la diferencia en internet pero todos apuntan a la diferencia entre add_action y add_filter. No quiero ir allí porque primero quiero aclarar esto y luego me mudaré allí.

Alguien puede ayudarme?

EDITAR después de la pregunta POST

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
do_action('custom');

add_action('custom','custom_register');

Intenté esto en el complemento pero no recibí el mensaje de alerta.

Pero cuando engancho la misma función, wp_headentonces funciona bien

/******************working****************/
add_action('wp_head','custom_register');
Dom
fuente
¿Qué sucede cuando llama do_action('custom'); después de registrar la devolución de llamada? Y asegúrese de que jQuery esté cargado.
fuxia
no recibí el mensaje de alerta ni en el back end ni en el front end
dom
jQuery están cargados. Cuando engancho la misma función wp_head, funciona bien pero no con elcustom
dom
Sun, creo que tu pregunta original fue respondida por toscho y deberías marcarla como resuelta. Las ediciones # 3 y # 4 que ha realizado pertenecen a una nueva Pregunta .
brasofilo

Respuestas:

13

Úselo do_action( 'unique_name' )para crear sus propias acciones.

Puede usar eso para ofrecer una API para su complemento , de modo que otros complementos puedan registrar devoluciones de llamada para su acción personalizada. Ejemplo: ¿Necesito llamar a do_action en mi complemento?

Pero también puede usar acciones personalizadas (o filtros) en un tema. Ejemplo: la mejor forma de implementar secciones personalizadas en un tema de WordPress

Y puede combinar ambos para hacer un complemento y un tema trabajando juntos. Ejemplo: ¿Cómo hacer que el método desde el complemento esté disponible en el tema?

Resumen: add_action( 'foo' )registra una devolución de llamada, do_action( 'foo' )ejecuta esa devolución de llamada registrada.

fuxia
fuente
Gracias por la ayuda que obtuve, esto es principalmente para fines de API. Probé una muestra pero no funcionó. ¿Puede encontrar algún problema allí? Revisa mi EDIT @toscho
dom
¿Podemos decir esto como otro caso como la herencia? en lugar de extender y anular la clase vamos por este camino. ¿Es esto correcto?
dom
@sun Hm, sí, pero puedes combinar ambos enfoques , no son mutuamente excluyentes.
fuxia
1

Esta es mi suposición, así que si lo sabes mejor, haz un comentario para que pueda actualizar mi suposición.

Su código de complemento se ejecuta antes wp_head()(lo que podemos suponer que invocará las acciones que se le agreguen). Cuando usted add_action('wp_head','custom_register'), le está diciendo a PHP que cuando (en el futuro) do_action('wp_head')se llama, para llamar custom_register()también. Lo mismo ocurre con su llamada a, add_action('custom','custom_register')pero como puede ver en su código, la llamada a do_action('custom')ya se ha realizado, y cuando se llamó, no había (todavía) ninguna acción agregada. Es por eso que Toscho le preguntó qué sucede cuando llama do_action('custom') después de registrar la devolución de llamada. Su respuesta sobre back end y front end es ambigua. Si intercambia las dos últimas líneas en el siguiente código, creo que funcionará:

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
do_action('custom');                    // This is called before it will have an effect.

add_action('custom','custom_register'); // Too late - do_action was already called.
Dave Scotese
fuente
0

do_action: Registra un enlace de acción mientras add_action: agrega una función de devolución de llamada al enlace registrado.

Ejemplo

Considere que desea imprimir algo antes de la barra lateral en su plantilla.

  1. Agregará un enlace de acción en su archivo de plantilla a index.phptravés de <?php add_action('bp_sidebar_left'); ?>.
  2. Ahora en su functions.phparchivo puede agregar una función de devolución de llamada a ese gancho para imprimir lo que desee.

add_action('bp_sidebar_left', 'bp_sidebar_left_cb'); function bp_sidebar_left_cb() { echo 'Hello World !'; }

Aamer Shahzad
fuente
-1

Tienes que usar como a continuación:

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Learning Hooks");});</script>';

}
.

add_action('custom','custom_register'); // Too late - do_action was already called. 
do_action('custom');                    // This is called before it will have an effect
usuario112289
fuente
Está funcionando para mí
usuario112289