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');

¿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.


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.

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 !'; }


-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

Está funcionando para mí
usuario112289
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.