Perché usare add_action per gli shortcode?

13 mar 2013, 10:22:34
Visualizzazioni: 17.3K
Voti: 8

Vorrei creare degli shortcode, ma alcuni tutorial suggeriscono di usare add_action:

add_action( 'init', 'register_shortcodes');

Ma ho letto un altro tutorial in cui l'autore non lo ha usato, inserendo semplicemente questo in functions.php:

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

Qual è il metodo migliore e perché usare add_action?

1
Commenti

Racchiudere le chiamate a add_shortcode in una funzione e chiamare quella funzione con un hook ti dà più controllo su quando gli shortcode vengono aggiunti. Ad esempio, potresti voler aggiungere quegli shortcode quando un plugin specifico è attivato, ma non altrimenti.

admcfajn admcfajn
20 feb 2019 08:26:07
Tutte le risposte alla domanda 3
1

Se dai un'occhiata alla pagina del Codex su add_shortcode(), non troverai nulla riguardo alla necessità di un add_action() prima di poter utilizzare add_shortcode().

Quindi, puoi semplicemente inserire il tuo add_shortcode() direttamente nel tuo functions.php. È quello che faccio anch'io.

Vedi questo articolo - WordPress Shortcodes: Una Guida Completa sull'uso degli shortcode e le migliori pratiche.

13 mar 2013 10:32:21
Commenti

In realtà hai linkato un articolo che dice che dovresti racchiudere in un'azione.

raam86 raam86
1 set 2013 16:39:47
0

A volte è necessario utilizzare l'azione 'init'. Ad esempio, in questo momento sto modificando un tema basato pesantemente su widget e pannello di personalizzazione. Ho provato ad aggiungere uno shortcode personalizzato senza azioni e ho ottenuto errori durante il salvataggio del contenuto nel pannello Personalizza. L'azione garantisce il corretto ordine di esecuzione delle funzioni. In pratica dice "ehi shortcodes! Prima caricherò le funzioni più importanti, poi voi!"

16 mar 2017 10:43:45
1

Senza ripetere troppo quanto già trattato nelle risposte precedenti; questo è semplicemente un approccio basato sulle migliori pratiche. Spesso lo utilizzo nello sviluppo di plugin quando ho bisogno di classi separate come nel template starter del plugin wppb.me.

Ha senso registrare tutti i tuoi hook per l'admin nel loader. Nel caso dello shortcode, puoi aggiungere l'hook add_action per lo shortcode nel metodo del loader degli hook:

/**
   * Registra tutti gli hook relativi alle funzionalità dell'area admin
   * del plugin
   */ 

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

Il principale vantaggio che ho con questo approccio è la facilità di manutenzione del codice poiché è modulare. Puoi aggiungere diversi altri hook nello stesso metodo, il che rende più semplice tracciare e modificare le cose, specialmente per un plugin di grandi dimensioni.

Significa quindi che nella classe dove vuoi usare add_shortcode non devi eseguire l'hook dell'azione nel metodo costruttore, puoi ora usarlo in un metodo personalizzato come:

public function register_shortcodes(){

        add_shortcode('recent-posts', array($this, 'recent_posts_function'));

    }
19 feb 2019 23:58:17
Commenti

Mi hai fatto risparmiare tempo. Non stavo passando il secondo argomento con un'istanza della classe e ho continuato a fare debug per 2 ore. :|

Tan-007 Tan-007
20 set 2019 03:59:31