De ce se folosește add_action pentru shortcode în WordPress?
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
?
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.

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!"

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'));
}
