Differenza tra do_action e add_action


20

Questa domanda potrebbe essere sbagliata, non ne sono sicuro. Perché non sono chiaro su questo.

So add_actionche è usato per agganciare la nostra funzione alla funzione specificata. Ad esempio, add_action('wp_head'.'myfunc');ora qualsiasi codice in myfuncverrà eseguito nel file wp_head(). Questo è chiaro ma ho dei dubbi su do_actioncosa fa?

Penso che sia usato per creare il nostro hook come hook già disponibili (wp_head, wp_footer, ecc.) Se ho ragione, qualcuno può mostrarmi una risposta comprensibile con un semplice esempio.

Ho provato la differenza in Internet ma tutti indicano la differenza tra add_action e add_filter. Non voglio andare lì perché prima voglio chiarire questo e poi mi sposterò lì.

Qualcuno può aiutarmi?

MODIFICA dopo la domanda POST

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

}
do_action('custom');

add_action('custom','custom_register');

Ho provato questo nel plugin ma non ho ricevuto il messaggio di avviso.

Ma quando aggancio la stessa funzione con wp_headallora funziona benissimo

/******************working****************/
add_action('wp_head','custom_register');

Cosa succede quando si chiama do_action('custom'); dopo aver registrato il callback? E assicurati che jQuery sia caricato.
fuxia

non ho ricevuto il messaggio di avviso né sul back-end né sul front-end
dom

jQuery sono caricati. Quando aggancio la stessa funzione con wp_headessa funziona benissimo ma non con ilcustom
sole

Sun, credo che toscho abbia risposto alla tua domanda originale e dovresti contrassegnarlo come risolto. Le modifiche n. 3 e n. 4 che hai fatto appartengono a una nuova domanda .
brasofilo,

Risposte:


13

Usa do_action( 'unique_name' )per creare le tue azioni.

Puoi usarlo per offrire un'API per il tuo plug-in , in modo che altri plug-in possano registrare callback per la tua azione personalizzata. Esempio: devo chiamare do_action nel mio plugin?

Ma puoi usare azioni personalizzate (o filtri) anche in un tema. Esempio: il modo migliore per implementare sezioni personalizzate in un tema WordPress

E puoi combinare entrambi per creare un plugin e un tema che lavorano insieme. Esempio: come rendere disponibile il metodo dal plugin nel tema?

Riepilogo: add_action( 'foo' )registra un callback, do_action( 'foo' )esegue il callback registrato.


Grazie per l'aiuto che ho ricevuto questo è principalmente a scopo API. Ho provato un campione ma non ha funzionato. Riesci a trovare qualche problema lì? Controlla il mio EDIT @toscho
dom

Possiamo dire questo come un altro caso come l'eredità? al fine di estendere e scavalcare la classe che stiamo andando in questo modo. È corretto?
domenica

@sun Hm, sì, ma puoi combinare entrambi gli approcci , non si escludono a vicenda.
fuxia

1

Questa è la mia ipotesi, quindi se sai meglio, per favore fai un commento in modo da poter aggiornare la mia ipotesi.

Il codice del plug-in viene eseguito prima wp_head()(che possiamo supporre invocherà le azioni aggiunte ad esso). Quando stai add_action('wp_head','custom_register'), stai dicendo a PHP che quando (in futuro) do_action('wp_head')viene chiamato, anche per chiamare custom_register(). Lo stesso vale per la tua chiamata a add_action('custom','custom_register')ma come vedi nel tuo codice, la chiamata a do_action('custom')è già stata effettuata e quando è stata chiamata, non è stata (ancora) aggiunta alcuna azione. Questo è il motivo per cui Toscho ha chiesto cosa succede quando si chiama do_action('custom') dopo aver registrato il callback. La tua risposta su back-end e front-end è ambigua. Se si scambiano le ultime due righe nel seguente codice, penso che funzionerà:

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 hook di azione mentre add_action: aggiunge una funzione di callback al hook registrato.

Esempio

Considera di voler stampare qualcosa prima della barra laterale nel tuo modello.

  1. Aggiungerai un hook di azione nel tuo file modello index.phptramite <?php add_action('bp_sidebar_left'); ?>.
  2. Ora nel tuo functions.phpfile puoi aggiungere una funzione di callback a quell'hook per stampare qualcosa che desideri.

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


-1

Devi usare come di seguito:

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

Funziona per me
user112289
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.