L'abbiamo letto numerose volte: un buon cittadino di WordPress carica solo il suo JavaScript dove è necessario. Questa pratica riduce al minimo i tempi di caricamento del sito e si scontra con altri script. Tuttavia, la maggior parte degli articoli parla solo dell'uso di wp_enqueue_script
per il caricamento condizionale di JavaScript nel contesto dell'amministratore di WordPress, delle pagine di amministrazione del plugin o delle pagine front-end nel loro complesso. Ma per quanto riguarda l'isolamento del nostro JavaScript in un particolare fine frontale pagina? Potremmo potenzialmente essere fantasiosi con Se
dichiarazioni, ma WordPress fornisce una utile API con un filtro per gestire solo questo genere di cose senza Se
- quindi diamo un'occhiata sotto il cofano.
"un buon cittadino di WordPress carica solo il suo JavaScript dove è necessario"
Quando una pagina di WordPress viene richiesta da un lettore, il caricatore di template di WordPress controlla se esiste il modello corretto e una funzione chiamata get_query_template
è chiamato. Questa funzione individua il modello corretto in base alla richiesta della pagina WordPress e restituisce il percorso completo al modello. Tuttavia, prima di restituire il percorso, consente di modificare l'output utilizzando il $ Type _template
filtro. $ Type
è il nome file del modello senza l'estensione.
get_query_template
Funzione Quindi se un lettore stava richiedendo un singola pagina post su un sito che utilizzava il tema Twenty Eleven, $ Type
valuterà a 'Single'
e potremmo usare un filtro chiamato 'Single_template'
per cambiare il percorso del modello di post singolo prima che fosse restituito per essere caricato da WordPress. Questo filtro sarebbe simile a questo:
add_filter ('single_template', 'benchpress_single_template'); function benchpress_single_template ($ template_path) // fa qualcosa qui restituisce $ template_path;
e ci fornisce esattamente ciò di cui abbiamo bisogno: un modo per indirizzare ogni specifico tipo di pagina / file modello al fine di isolare il nostro JavaScript in particolari pagine front-end di WordPress. Ora qualsiasi file di pagina / modello può essere preso di mira semplicemente utilizzando un filtro con il nome del file modello. Eccezionale!
Ora mettiamolo insieme passo dopo passo.
Ricorda, il nome del filtro sarà il nome del file del modello senza l'estensione. Quindi, utilizzando il tema Twenty Eleven e desiderando di indirizzare il nostro JavaScript al autore solo pagine, aggiungeremo il seguente codice al nostro functions.php file:
add_filter ('author_template', 'benchpress_author_template');
function benchpress_author_template ($ template_path) wp_enqueue_script ('nome univoco per lo script', get_stylesheet_directory_uri (). 'percorso / a / script'); wp_enqueue_style ('nome univoco per stylesheet', get_stylesheet_directory_uri (). 'percorso / a / stylesheet'); return $ template_path;
Si noti che il filtro passa il valore del percorso del modello alla nostra richiamata e si ritorna $ template_path
incolume perché non abbiamo bisogno di cambiarlo.
Che dire del caricamento condizionale di JavaScript che viene generato nel mio PHP?
Ho visto questa domanda posta e mentre non sono sicuro che questo sia il migliore modo, ecco un modo per gestire questo.
Aggiungi la seguente riga alla funzione di callback del filtro:
add_action ('wp_head', 'benchpress_dynamic_js');
Quindi aggiungere la funzione di callback per il wp_head
filtro:
function benchpress_dynamic_js () if (! is_admin ()) echo '';
Quindi il codice completo sarà simile a:
add_filter ('author_template', 'benchpress_author_template'); function benchpress_author_template ($ template_path) wp_enqueue_script ('nome univoco per lo script', get_stylesheet_directory_uri (). 'percorso / a / script'); wp_enqueue_style ('nome univoco per stylesheet', get_stylesheet_directory_uri (). 'percorso / a / stylesheet'); add_action ('wp_head', 'benchpress_dynamic_js'); return $ template_path; function benchpress_dynamic_js () if (! is_admin ()) echo '';
Funzioni di WordPress
wp_enqueue_script
get_query_template
add_filter
wp_enqueue_style
is_admin
Filtri WordPress
$ Type _template
wp_head
File modello WordPress