Utilizzare wp init hook per chiamare altri hook?


11

Voglio sapere se è una buona pratica in base al tema di WordPress o allo sviluppo di plugin.

add_action('init','all_my_hooks');

function all_my_hooks(){

// some initialization stuff here and then

add_action('admin_init',-----);
add_action('admin_menu',----);

// more like so

}

Grazie

Risposte:


16

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 initgancio: utilizzare wp_loadedinvece. Quello che corre dopo inite 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.


3
+1 per wp_loadede informazioni MS.
Kaiser

grazie mille per la tua risposta, ancora un dubbio, che è meglio caricare tutti gli altri hook all'interno di wp_loaded o caricarli separatamente? mi chiedo se aggiungo hook in wp_loaded verranno agganciati prima invece di essere agganciati dopo admin_init o admin_menu?
Atinder

i ganci a cascata non sono un problema?
Atinder

No, perché dovrebbe essere? Chiama il secondo hook solo se il primo è stato utile.
fuxia

3

Non vedo i grandi benefici di questa pratica, per questi motivi:

Le tue funzioni di callback non vengono chiamate al momento della registrazione

Le funzioni add_actione add_filteraggiungono solo una voce alla variabile globale $wp_filterche contiene tutti i filtri e le azioni. Vedere il fonte . Non chiama la tua funzione. Il codice verrà eseguito solamente quando la do_actione apply_filterssono 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_filterpiù grande => più memoria richiesta. Ma penso che creare una nuova funzione abbia lo stesso problema.

Codice organizzativo

Mettere tutto in una funzione ti costringe a ricordare tutti gli hook di ogni file nel tuo tema / plugin. Non faresti qualcosa del genere:

  • in header.php: aggiungi hook e funzioni di callback per le cose che accadono nell'intestazione (come menu, registrazione script)
  • in content.php: aggiungi hook e funzioni di callback per filtrare il contenuto
  • admin-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:

  • mettere solo funzioni callback in header.php, content.php,admin-menu.php
  • e metti tutti gli hook in una funzione separata in un altro file

=> Ciò ti renderà difficile sapere cosa succede quando guardi il contenuto del header.phpfile. 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!

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.