De ce se folosește add_action pentru shortcode în WordPress?

13 mar. 2013, 10:22:34
Vizualizări: 17.3K
Voturi: 8

Doresc să creez shortcodes, dar unele tutoriale menționează să folosesc add_action:

add_action( 'init', 'register_shortcodes');

Dar am citit un alt tutorial unde autorul nu a folosit această metodă, ci doar a adăugat acest cod în functions.php:

add_shortcode( 'recent-posts', 'recent_posts_function' );

Care este cea mai bună metodă și de ce să folosesc add_action?

1
Comentarii

Învelirea apelurilor către add_shortcode într-o funcție și apelarea acelei funcții cu un hook îți oferă mai mult control asupra momentului în care shortcode-urile sunt adăugate. De exemplu, poți dori să adaugi acele shortcode-uri când un anumit plugin este activat, dar nu în alte cazuri.

admcfajn admcfajn
20 feb. 2019 08:26:07
Toate răspunsurile la întrebare 3
1

Dacă te uiți la pagina Codex despre add_shortcode(), nu vei vedea nimic despre necesitatea unui add_action() înainte de a putea folosi add_shortcode().

Deci, poți să pui direct add_shortcode() în fișierul tău functions.php. Și eu fac la fel.

Vezi acest articol - WordPress Shortcodes: Un Ghid Complet despre utilizarea shortcode-urilor și cele mai bune practici.

13 mar. 2013 10:32:21
Comentarii

De fapt, ai legat un articol care spune că ar trebui să înfășori într-o acțiune.

raam86 raam86
1 sept. 2013 16:39:47
0

Uneori este necesar să folosim acțiunea 'init'. De exemplu, în prezent lucrez la o temă care se bazează în mare parte pe widget-uri și panoul de personalizare. Am încercat să adaug un shortcode personalizat fără acțiuni și am primit erori la salvarea conținutului în panoul de personalizare. Acțiunea asigură ordinea corectă de executare a funcțiilor. Ea spune "hei shortcode-uri! Mai întâi voi încărca funcțiile cele mai importante, apoi voi!"

16 mar. 2017 10:43:45
1

Fără a repeta prea mult din ce s-a acoperit în răspunsurile de mai sus; acesta este doar o abordare conform celor mai bune practici. Deseori folosesc acest lucru în dezvoltarea de plugin-uri atunci când am nevoie de clase separate, cum ar fi în șablonul de pornire pentru plugin de la wppb.me.

Este logic să înregistrezi toate hook-urile pentru administrare în loader. În cazul shortcode-urilor, poți adăuga hook-ul add_action pentru shortcode în metoda de încărcare a hook-urilor:

/**
 * Înregistrează toate hook-urile legate de funcționalitatea zonei de administrare
 * a plugin-ului
 */ 

private function define_admin_hooks() {
    $plugin_admin = new instance( $this->get_plugin_name(), $this->get_version() );
    $this->loader->add_action( 'init', $plugin_admin, 'register_shortcodes');
}

Principalul beneficiu al acestei abordări este ușurința în întreținerea codului, deoarece acesta este modular. Poți adăuga mai multe alte hook-uri în aceeași metodă, ceea ce facilitează urmărirea și modificarea, mai ales pentru un plugin mare.

Aceasta înseamnă că în clasa în care dorești să folosești add_shortcode, nu mai este necesar să rulezi hook-ul de acțiune în metoda constructor, ci poți folosi acum o metodă personalizată precum:

public function register_shortcodes(){
    add_shortcode('recent-posts', array($this, 'recent_posts_function'));
}
19 feb. 2019 23:58:17
Comentarii

Mi-ai economisit timp. Nu treceam al doilea argument cu o instanță a clasei și am tot depanat timp de 2 ore. :|

Tan-007 Tan-007
20 sept. 2019 03:59:31