Home » Articole » RO » Calculatoare » Dezvoltarea web » WordPress » API module în WordPress – Cârlige, acțiuni și filtre

API module în WordPress – Cârlige, acțiuni și filtre

postat în: WordPress 0

Cârlige, acțiuni

Cârligele sunt furnizate de WordPress pentru a permite modulului să se „agațe” în restul site-ului WordPress; adică, pentru a apela funcții în modul în anumite momente, și a pune astfel modulul în mișcare. Există două tipuri de cârlige:

  1. Acțiuni
  2. Filtre

Poți atinge uneori același scop fie cu o acțiune, fie cu un filtru. De exemplu, dacă dorești ca modulul să schimbe textul unei postări, poți adăuga o funcție de acțiune la publish_post (astfel postul se modificat când este salvat în baza de date), sau o funcție de filtru la the_content (astfel postarea este modificată când este afișată în ecranul browser-ului).

Referințe de funcții

Funcții de filtre: has_filter() , add_filter() , apply_filters() , apply_filters_ref_array() , current_filter() , remove_filter() , remove_all_filters() , doing_filter()

Funcții de acțiuni: has_action() , add_action() , do_action() , do_action_ref_array() , did_action() , remove_action() , remove_all_actions() , doing_action()

Funcții de activare/dezactivare/dezinstalare: register_activation_hook() , register_uninstall_hook() , register_deactivation_hook()

Acțiuni

Acțiunile sunt declanșate de evenimente specifice care au loc în WordPress, cum ar fi publicarea unei postări, schimbarea temei, sau afișarea un ecran de administrare. O acțiune este o funcție PHP personalizată definită în modul (sau temă) și agățat, adică stabilit pentru a răspunde la unele dintre aceste evenimente. Acțiunile de obicei fac una sau mai multe dintre următoarele:

  • Modifică datele bazei de date.
  • Trimite un mesaj prin e-mail.
  • Modifică pagina generată de ecranul de administrare sau pagina de utilizator trimisă la un browser de utilizator.

Pașii de bază pentru a face acest lucru (descris în detaliu mai jos) sunt:

  1. Creați o funcție PHP care ar trebui să execute atunci când se produce un eveniment WordPress specific, în fișierul modulului.
  2. Agățați această funcție de eveniment utilizând funcția add_action().
  3. Puneți funcția PHP într-un fișier al modulului, și activați-o.

Creați o funcție de acțiune

Primul pas în crearea unei acțiuni în modul este de a crea o funcție PHP cu funcționalitatea de acțiune a modulului, și puneți-l în fișierul modulului (fișierul modulului trebuie să se găsească în directorul wp-content/plugins). De exemplu, dacă doriți ca prietenii dvs. să primească un mesaj prin e-mail ori de câte ori creați un mesaj nou, s-ar putea defini următoarele funcții:

function email_friends($post_ID)  {
$friends = ‘bob@example.org,susie@example.org’;
mail($friends, „sally’s blog updated”,
‘I just put something on my blog: http://blog.example.com’);
return $post_ID;
}

Pentru majoritatea acțiunilor, funcția ar trebui să accepte un singur parametru (de obicei ID-ul postării sau comentariului, în funcție de acțiune). Unele acțiuni folosesc mai mult de un parametru. Pe lângă un parametru, puteți accesa, de asemenea, variabilele globale ale WordPress, și apela alte funcții WordPress (sau funcții în fișierul modulului).

Orice text determinat de funcție (de exemplu, imprimare) va apărea în pagina sursă în locul în care a fost invocată acțiunea.

NOTĂ: Rețineți că alte module sau nucleul WordPress pot deja folosi numele funcției la care te-ai gândit. Evitați coliziuni cu alte nume de funcții.

Evitarea coliziunii numelui funcției

Este posibil ca cineva să fi creat un modul cu o funcție numită la fel ca cea din modulul tău!

Aceasta este o problemă, deoarece PHP nu permite funcții multiple cu același nume. Dacă două module oferă o funcție cu același nume, sau un modul oferă o funcție cu un nume la fel ca o funcție WordPress, blogul ar putea să înceteze să funcționeze. Există două moduri de a evita această problemă.

Prima soluție este să se utilizeze un prefix fiecare funcție în modul cu un set unic de caractere. Dacă numele tău este John Q. Public, s-ar putea declara funcțiile ca function jqp_output() {…}. Probabilitatea ca o persoană cu aceleași inițiale să facă același lucru cu modulul său este posibilă, dar mică.

Cea de a doua – și, eventual, mai ușoară – soluție este să anexați funcțiile modulului într-o clasă și să apelați clasa prin metode statice. Aceasta sună mai complicat decât este.

Luați în considerare această clasă, care se extinde pe exemplele prezentate mai sus:

class emailer {
static function send($post_ID)  {
$friends = ‘bob@example.org,susie@example.org’;
mail($friends,”sally’s blog updated”,’I just put something on my blog: http://blog.example.com
);
return $post_ID;
}
}

add_action(‘publish_post’, array(‘emailer’, ‘send’));

Această clasă, numită emailer, folosește o metodă send care pune în aplicare funcționalitatea modulului.

Funcția add_action() din afara clasei adaugă acțiunea la WordPress care îi spune să apeleze metoda send atunci când o postare este publicată. Matricea folosită în al doilea parametru spune sistemului modulului să apeleze metoda statică a clasei „emailer” numită „send„.

Funcția send este protejat de spațiul de nume la nivel global prin declarația de clasă. Nu este posibil să se apeleze send() în mod direct, și astfel nicio altă funcție numită send nu se va ciocni cu aceasta. Dacă ați vrut să apelați send(), va trebui să utilizați un operator de rezoluție de domeniu de aplicare, cum ar fi aceasta: emailer::send()

Exemplul de mai sus este pentru metodele statice. Dacă aveți o instanță a unei clase, atunci aceasta nu va funcționa. Pentru a apela o metodă a unei instanțe aveți nevoie să treceți instanța ca o variabilă. Luați în considerare exemplul de mai sus modificat pentru a avea în vedere acest lucru:

class emailer {
function send($post_ID)  {
$friends = ‘bob@example.org,susie@example.org’;
mail($friends,”sally’s blog updated”,’I just put something on my blog: http://blog.example.com’);
return $post_ID;
}
}
$myEmailClass = new emailer();
add_action(‘publish_post’, array($myEmailClass, ‘send’));

Traducere din wordpress.org

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *