Diferența dintre do_action și add_action
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');
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ă.

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

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 Hm, da, dar poți combina ambele abordări, ele nu se exclud reciproc.

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.

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ă.
- Veți adăuga un action hook în fișierul șablon
index.php
prin<?php add_action('bp_sidebar_left'); ?>
. - 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 !';
}

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
