Diferencia entre do_action y add_action

18

Esta pregunta podría estar equivocada, no estoy seguro de ello. Porque no tengo claro esto.

Sé que add_action se usa para enganchar nuestra función a la función especificada. Por ejemplo, add_action('wp_head'.'myfunc'); ahora, cualquier código en myfunc se ejecutará en el wp_head() . Esto está claro, pero tengo dudas en do_action ¿qué hace?

Creo que se usa para crear nuestros propios ganchos como ganchos ya disponibles (wp_head, wp_footer, etc. etc.) Si tengo razón, ¿puede alguien mostrarme una respuesta comprensible con un simple ejemplo?

He probado 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 moveré allí.

¿Puede alguien ayudarme?

EDIT 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 con wp_head , entonces está funcionando bien

/******************working****************/
add_action('wp_head','custom_register');
    
pregunta sun 28.10.2013 - 11:35

4 respuestas

10

Use 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 costumbre acción. Ejemplo: ¿Debo llamar a do_action en mi complemento?

Pero también puedes usar acciones personalizadas (o filtros) en un tema. Ejemplo: Práctica recomendada para implementar secciones personalizadas en un tema de WordPress

Y puede combinar ambos para hacer que un complemento y un tema trabajen juntos. Ejemplo: ¿Cómo hacer que el método del 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.

    
respondido por el fuxia 28.10.2013 - 11:42
1

Esta es mi suposición, por lo que si usted sabe mejor, por favor haga un comentario para que pueda actualizar mi conjetura.

Su código de complemento se ejecuta antes de wp_head() (que podemos asumir que invocará las acciones agregadas a él). Cuando add_action('wp_head','custom_register') , le está diciendo a PHP que cuando (en el futuro) se llame a do_action('wp_head') , también debe llamar a custom_register() . Lo mismo se aplica a su llamada a add_action('custom','custom_register') , pero como se ve en su código, la llamada a do_action('custom') ya se realizó, y cuando se llamó, no se ha agregado ninguna acción (aún). Esta es la razón por la que Toscho preguntó qué sucede cuando llama a do_action('custom') después de que registró la devolución de llamada. Su respuesta acerca de back-end y front-end es ambigua. Si intercambias 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.
    
respondido por el Dave Scotese 14.02.2016 - 20:23
0

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

Ejemplo

Considera que querías imprimir algo antes de la barra lateral en tu plantilla.

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

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

    
respondido por el Aamer Shahzad 19.04.2018 - 08:10
-1

Tienes que usarlo 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
    
respondido por el user112289 01.02.2017 - 17:15

Lea otras preguntas en las etiquetas