Risposte:
In generale: Sì, attendi che un hook dedicato avvii il tuo codice. Non gettare mai un'istanza di oggetto nello spazio dei nomi globale. Ma init
è raramente necessario.
Ti colleghi il più tardi possibile. Se il tuo primo codice viene eseguito wp_head
, non utilizzare un hook precedente. Puoi persino agganciare a cascata :
add_action( 'wp_head', 'first_callback' );
function first_callback()
{
// do something
// then
add_action( 'wp_footer', 'second_callback' );
}
Per quanto riguarda il init
gancio: utilizzare wp_loaded
invece. Quello che corre dopo init
e dopo è ms_site_check()
stato chiamato. In questo modo si evita di eseguire il plug-in su un sito secondario non valido in un'installazione su più siti. Tutto il resto è uguale.
Non vedo i grandi benefici di questa pratica, per questi motivi:
Le funzioni add_action
e add_filter
aggiungono solo una voce alla variabile globale $wp_filter
che contiene tutti i filtri e le azioni. Vedere il fonte . Non chiama la tua funzione. Il codice verrà eseguito solamente quando la do_action
e apply_filters
sono chiamati (con adeguate nome gancio), che avviene molto tardi nel luogo in cui tali ganci dovrebbero essere.
Si potrebbe dire che così facendo la variabile globale diventerà $wp_filter
più grande => più memoria richiesta. Ma penso che creare una nuova funzione abbia lo stesso problema.
Mettere tutto in una funzione ti costringe a ricordare tutti gli hook di ogni file nel tuo tema / plugin. Non faresti qualcosa del genere:
header.php
: aggiungi hook e funzioni di callback per le cose che accadono nell'intestazione (come menu, registrazione script)content.php
: aggiungi hook e funzioni di callback per filtrare il contenutoadmin-menu.php
: aggiungi hook e funzioni di callback per aggiungere il menu admin(supponi che quei file siano inseriti nel tuo tema / plugin)
Invece, devi:
header.php
, content.php
,admin-menu.php
=> Ciò ti renderà difficile sapere cosa succede quando guardi il contenuto del header.php
file. Devi cercare di sapere quando questi callback vengono attivati.
E pensa alla situazione quando hai più classi nel tuo tema / plugin. Metti tutti i ganci di tutte le classi in un unico posto? O ogni classe ha una funzione wrapper che contiene tutti gli hook? È troppo ridondante!
Al di sopra di questi motivi, penso che sia uno stile personale :). Vedo che alcuni framework come Hybrid fanno quello che hai detto. A volte mi rende difficile scavare in quei quadri!
wp_loaded
e informazioni MS.