Limitare un plug-in per caricare solo i suoi CSS e JS su pagine selezionate?


9

Vorrei che un plug-in limitasse il suo caricamento di fogli di stile CSS e file JS JavaScript solo alle pagine per le quali sono necessari.

Un esempio per la mia domanda è il plug-in Modulo di contatto 7 che ho usato per creare un modulo in una pagina del mio sito (la pagina " contattami "). Tuttavia aggiunge le seguenti righe a OGNI pagina / post sul sito Web:

<link rel='stylesheet' id='contact-form-7-css'  href='http://www.r-statistics.com/wp-content/plugins/contact-form-7/styles.css?ver=2.3.1' type='text/css' media='all' /> 

<script type='text/javascript' src='http://www.r-statistics.com/wp-content/plugins/contact-form-7/scripts.js?ver=2.3.1'></script> 

Questo mi fa sospettare che questo plugin stia compromettendo il tempo di caricamento del mio sito, per un'estensione che mi interessa su una sola pagina del sito.

Quindi, la mia domanda è: come posso rimuovere queste righe extra da tutte le pagine tranne la pagina "Contattami" ma senza disattivare il plugin?

Risposte:


9

Gli stili e gli script sono sempre impostati dalle funzioni wp_enqueue_script()e wp_enqueue_style(), per funzionare , devono essere collegati a un particolare gancio di azione. Ho dato una sbirciatina nel Modulo di contatto 7 e sembra che stia usando i tag azione di wpcf7_enqueue_scriptse wpcf7_enqueue_stylesper aggiungerli agli hook wp_print_scriptse wp_print_styles.

Quindi, ciò che devi fare è sganciare gli script e gli stili da ogni pagina tranne la tua pagina di contatto. L' wp_headazione si attiva prima delle azioni dello script e degli stili, quindi dovrai aggiungere qualcosa del genere al file di function.php del tuo tema:

function remove_wpcf7_extras() {
    remove_action('wp_print_scripts', 'wpcf7_enqueue_scripts');
    remove_action('wp_print_styles', 'wpcf7_enqueue_styles');
}

if( ! is_page('contact me') ) {
    add_action('wp_head', 'remove_wpcf7_extras');
}

La funzione is_page () tornerà truequando ti trovi nella pagina dei contatti (supponendo che il nome sia "contattami") ... puoi anche usare lo slug della pagina e l'ID della pagina per il filtro. Su tutte le altre pagine, il if()condizionale aggiungerà la funzione di rimozione di script / stile wp_headall'azione, che si attiva subito prima delle azioni wp_print_scriptse wp_print_styles.

Ciò dovrebbe rimuovere il codice aggiuntivo dalle tue pagine e non dovrai disattivare il plug-in o modificare i file core. Le funzioni e il codice che ho elencato sopra non causeranno l'interruzione del tema se in futuro rimuoverai il Modulo di contatto 7 ... quindi non devi preoccuparti della compatibilità dell'aggiornamento futuro.


Ciao EAMann. Ottima soluzione - grazie! Pensi che questo metodo potrebbe essere racchiuso in un plug-in che controlla quali hook vengono utilizzati e quindi consente a qualcuno di disattivarli in base alla posizione della pagina?
Tal Galili,

Sfortunatamente, ci sono molti hook utilizzati in modo dinamico all'interno di WordPress. Quindi non puoi rilevare in modo affidabile quali ganci vengono utilizzati ... ma probabilmente potresti catturarli in questo modo.
EAMann,

Freddo. mi hai appena dato un'idea per una nuova domanda: wordpress.stackexchange.com/questions/698/…
Tal Galili

Solo per questo sai, mi hai anche dato l'idea di iniziare a sviluppare questo plug-in :-)
EAMann

3
@EAMann e @Tal Galili - In realtà puoi catturare tutti gli hook, anche quelli dinamici usando l' allhook, vedi wordpress.stackexchange.com/questions/307
MikeSchinkel
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.