Diferența dintre do_action și add_action

28 oct. 2013, 12:35:05
Vizualizări: 58.8K
Voturi: 27

Această întrebare ar putea fi greșită, nu sunt sigur de asta. Pentru că nu îmi este foarte clar.

Știu că add_action este folosit pentru a conecta funcția noastră la funcția specificată. De exemplu add_action('wp_head','myfunc'); acum orice cod din myfunc va fi executat în wp_head(). Acest lucru este clar dar am îndoieli despre do_action și ce face acesta?

Cred că este folosit pentru a crea propriile noastre hook-uri asemenea celor deja disponibile (wp_head, wp_footer, etc). Dacă am dreptate, poate cineva să îmi ofere un răspuns simplu și ușor de înțeles cu un exemplu simplu.

Am căutat diferența pe internet dar toate indică spre diferența dintre add_action și add_filter. Nu vreau să ajung acolo pentru că mai întâi vreau să clarific acest aspect și apoi voi trece mai departe.

Mă poate ajuta cineva?

EDITARE după POSTAREA Întrebării

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Învățăm despre Hook-uri");});</script>';

}
do_action('custom');

add_action('custom','custom_register');

Am încercat acest cod în plugin dar nu am primit mesajul de alertă.

Dar când conectez aceeași funcție cu wp_head atunci funcționează bine

/******************funcționează****************/
add_action('wp_head','custom_register');
4
Comentarii

Ce se întâmplă când apelezi do_action('custom'); după ce ai înregistrat callback-ul? Și asigură-te că jQuery este încărcat.

fuxia fuxia
28 oct. 2013 13:07:32

Nu am primit niciun mesaj de alertă nici în back-end, nici în front-end

sun sun
28 oct. 2013 13:12:08

jQuery este încărcat. Când atașez aceeași funcție cu wp_head funcționează corect, dar nu și cu custom

sun sun
28 oct. 2013 13:28:03

Soare, cred că întrebarea ta inițială a primit răspuns de la toscho și ar trebui să o marchezi ca rezolvată. Modificările #3 și #4 pe care le-ai făcut ar trebui să fie pe o întrebare nouă.

brasofilo brasofilo
30 oct. 2013 15:32:09
Toate răspunsurile la întrebare 4
3
21

Folosește do_action( 'nume_unic' ) pentru a crea propriile acțiuni.

Poți folosi această funcționalitate pentru a oferi un API pentru plugin-ul tău, astfel încât alte plugin-uri să poată înregistra funcții de callback pentru acțiunea ta personalizată. Exemplu: Trebuie să apelez do_action în plugin-ul meu?

Dar poți folosi acțiuni personalizate (sau filtre) și într-o temă. Exemplu: Cea mai bună practică pentru implementarea secțiunilor personalizate într-o temă WordPress

Și poți combina ambele pentru a face un plugin și o temă să funcționeze împreună. Exemplu: Cum să faci o metodă dintr-un plugin disponibilă în temă?

Rezumat: add_action( 'foo' ) înregistrează o funcție de callback, do_action( 'foo' ) execută acea funcție înregistrată.

28 oct. 2013 12:42:43
Comentarii

Mulțumesc pentru ajutor, am obținut acest lucru în principal pentru scopuri API. Am încercat un exemplu, dar nu a funcționat. Poți identifica vreo problemă acolo? Verifică EDIT-ul meu @toscho

sun sun
28 oct. 2013 13:07:58

Putem considera asta ca un alt caz similar moștenirii? În loc să extindem și să suprascriem clasa, mergem pe această cale. Este corect?

sun sun
28 oct. 2013 14:11:38

@sun Hm, da, dar poți combina ambele abordări, ele nu se exclud reciproc.

fuxia fuxia
28 oct. 2013 14:19:46
0

Aceasta este presupunerea mea, așa că dacă știți mai bine, vă rog să lăsați un comentariu pentru a putea actualiza presupunerea mea.

Codul pluginului dvs. este executat înainte de wp_head() (pe care îl putem presupune că va invoca acțiunile adăugate la el). Când utilizați add_action('wp_head','custom_register'), îi spuneți PHP-ului că atunci când (în viitor) este apelat do_action('wp_head'), să apeleze și custom_register(). Același lucru este valabil și pentru apelul dvs. la add_action('custom','custom_register'), dar după cum vedeți în codul dvs., apelul către do_action('custom') a fost deja făcut, iar când a fost apelat, nu exista (încă) nicio acțiune adăugată la el.

Acesta este motivul pentru care Toscho a întrebat ce se întâmplă când apelați do_action('custom') după ce ați înregistrat callback-ul. Răspunsul dvs. despre back end și front end este ambiguu. Dacă schimbați ultimele două linii din următorul cod, cred că va funcționa:

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Învățând Hooks");});</script>';

}
do_action('custom');                    // Acesta este apelat înainte să aibă vreun efect.

add_action('custom','custom_register'); // Prea târziu - do_action a fost deja apelat.
14 feb. 2016 21:23:47
1

do_action : Înregistrează un action hook în timp ce add_action : adaugă o funcție de callback la hook-ul înregistrat.

Exemplu

Să presupunem că doriți să afișați ceva înaintea barei laterale în șablonul dumneavoastră.

  1. Veți adăuga un action hook în fișierul șablon index.php prin <?php add_action('bp_sidebar_left'); ?>.
  2. Acum, în fișierul functions.php, puteți adăuga o funcție de callback la acel hook pentru a afișa ceea ce doriți.

add_action('bp_sidebar_left', 'bp_sidebar_left_cb'); function bp_sidebar_left_cb() { echo 'Salut Lume !'; }

19 apr. 2018 09:10:05
Comentarii

Ce înseamnă să 'înregistrezi un hook'? Unde se înregistrează?

Cornelius Cornelius
25 ian. 2021 07:08:17
1
-1

Trebuie să utilizați ca mai jos:

function custom_register()
{
    echo '<script>jQuery(document).ready(function(){alert("Învățând Hook-uri");});</script>';

}
.

add_action('custom','custom_register'); // Prea târziu - do_action a fost deja apelat.
do_action('custom');                    // Acesta este apelat înainte să aibă vreun efect
1 feb. 2017 18:15:51
Comentarii

Funcționează pentru mine

user112289 user112289
1 feb. 2017 18:16:37