Differenza tra do_action e add_action

28 ott 2013, 12:35:05
Visualizzazioni: 58.8K
Voti: 27

Questa domanda potrebbe essere sbagliata, non ne sono sicuro. Perché non ho le idee chiare su questo.

So che add_action viene utilizzato per agganciare la nostra funzione alla funzione specificata. Per esempio add_action('wp_head','myfunc'); ora qualsiasi codice in myfunc verrà eseguito in wp_head(). Questo è chiaro ma ho dei dubbi su do_action, cosa fa?

Penso che venga utilizzato per creare i nostri hook personalizzati come quelli già disponibili (wp_head, wp_footer, ecc.). Se ho ragione, qualcuno può mostrarmi una risposta semplice e comprensibile con un esempio basilare?

Ho cercato la differenza su internet ma tutti fanno riferimento alla differenza tra add_action e add_filter. Non voglio andare lì perché prima voglio chiarire questo e poi passerò a quello.

Qualcuno può aiutarmi?

MODIFICA dopo la pubblicazione della domanda

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Imparando gli Hook");});</script>';
}
do_action('custom');

add_action('custom','custom_register');

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

Ma quando aggancio la stessa funzione con wp_head allora funziona correttamente

/******************funzionante****************/
add_action('wp_head','custom_register');
4
Commenti

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

fuxia fuxia
28 ott 2013 13:07:32

Non ho ricevuto il messaggio di alert né nel back end né nel front end

sun sun
28 ott 2013 13:12:08

jQuery è caricato. Quando collego la stessa funzione con wp_head funziona bene ma non con custom

sun sun
28 ott 2013 13:28:03

Domenica, credo che la tua domanda originale sia stata risposta da toscho e dovresti contrassegnarla come risolta. Le modifiche #3 e #4 che hai effettuato appartengono a una nuova domanda.

brasofilo brasofilo
30 ott 2013 15:32:09
Tutte le risposte alla domanda 4
3
21

Usa do_action( 'nome_univoco' ) per creare le tue azioni personalizzate.

Puoi utilizzarlo per offrire un'API per il tuo plugin, così altri plugin possono registrare callback per la tua azione personalizzata. Esempio: Devo chiamare do_action nel mio plugin?

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

E puoi combinarli entrambi per far lavorare insieme un plugin e un tema. Esempio: Come rendere disponibile un metodo del plugin nel tema?

Riassunto: add_action( 'foo' ) registra una callback, do_action( 'foo' ) esegue quella callback registrata.

28 ott 2013 12:42:43
Commenti

Grazie per l'aiuto, questo è principalmente per scopi API. Ho provato un esempio ma non ha funzionato. Riesci a trovare qualche problema? Controlla il mio EDIT @toscho

sun sun
28 ott 2013 13:07:58

Possiamo considerarlo un altro caso simile all'ereditarietà? Invece di estendere e sovrascrivere la classe, stiamo procedendo in questo modo. È corretto?

sun sun
28 ott 2013 14:11:38

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

fuxia fuxia
28 ott 2013 14:19:46
0

Questa è la mia supposizione, quindi se sai qualcosa di meglio, per favore lascia un commento così posso aggiornare la mia ipotesi.

Il codice del tuo plugin viene eseguito prima di wp_head() (che possiamo assumere invocherà le azioni aggiunte ad esso). Quando usi add_action('wp_head','custom_register'), stai dicendo a PHP che quando (in futuro) verrà chiamato do_action('wp_head'), dovrà anche 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 fatta, e quando è stata chiamata, non c'era ancora nessuna azione aggiunta ad essa.

Ecco perché Toscho ha chiesto cosa succede quando chiami do_action('custom') dopo aver registrato il callback. La tua risposta riguardo al back end e front end è ambigua. Se inverti 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');                    // Questa viene chiamata prima che possa avere effetto.

add_action('custom','custom_register'); // Troppo tardi - do_action è già stato chiamato.
14 feb 2016 21:23:47
1

do_action: Registra un hook di azione mentre add_action: aggiunge una funzione di callback all'hook registrato.

Esempio

Supponi di voler stampare qualcosa prima della sidebar nel tuo template.

  1. Aggiungerai un hook di azione nel tuo file template index.php tramite <?php add_action('bp_sidebar_left'); ?>.
  2. Ora nel tuo file functions.php puoi aggiungere una funzione di callback a quell'hook per stampare ciò che desideri.
add_action('bp_sidebar_left', 'bp_sidebar_left_cb');
function bp_sidebar_left_cb() {
    echo 'Ciao Mondo!';
}
19 apr 2018 09:10:05
Commenti

Cosa significa 'registrare un hook'? Dove viene registrato?

Cornelius Cornelius
25 gen 2021 07:08:17
1
-1

Devi utilizzare come mostrato di seguito:

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Imparando gli Hook");});</script>';

}
.

add_action('custom','custom_register'); // Troppo tardi - do_action è già stato chiamato.
do_action('custom');                    // Questo viene chiamato prima che possa avere effetto
1 feb 2017 18:15:51
Commenti

Funziona per me

user112289 user112289
1 feb 2017 18:16:37