Restreindre un plugin à charger uniquement ses CSS et JS sur les pages sélectionnées?


9

Je voudrais qu'un plugin limite son chargement de feuilles de style CSS et de fichiers JavaScript JS aux seules pages pour lesquelles ils sont nécessaires.

Un exemple de ma question est le plugin Contact Form 7 que j'ai utilisé pour créer un formulaire sur une seule page de mon site (la page " me contacter "). Cependant, il ajoute les lignes suivantes à CHAQUE page / publication sur le site 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> 

Cela me fait soupçonner que ce plugin nuit au temps de chargement de mon site, pour une extension qui m'intéresse sur une seule page du site.

Ainsi, ma question est de savoir comment supprimer ces lignes supplémentaires de toutes les pages à l'exception de la page "Contactez-moi" mais sans désactiver le plugin?

Réponses:


9

Les styles et les scripts sont toujours configurés par les fonctions wp_enqueue_script()et wp_enqueue_style(), qui doivent être liés à un crochet d'action particulier pour fonctionner. J'ai jeté un coup d'œil à l'intérieur du formulaire de contact 7, et il semble qu'il utilise des balises d'action de wpcf7_enqueue_scriptset wpcf7_enqueue_stylespour les ajouter aux crochets wp_print_scriptset wp_print_styles.

Donc, ce que vous devez faire, c'est décrocher les scripts et les styles de chaque page sauf votre page de contact. L' wp_headaction se déclenche avant les actions de script et de style, vous devrez donc ajouter quelque chose comme ceci au fichier functions.php de votre thème:

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 fonction is_page () revient truelorsque vous êtes sur la page de contact (en supposant que le nom est "contactez-moi") ... vous pouvez également utiliser le slug de page et l'ID de page pour le filtre. Sur toutes les autres pages, le if()conditionnel ajoutera la fonction de suppression de script / style à l' wp_headaction, qui se déclenche juste avant les actions wp_print_scriptset wp_print_styles.

Cela devrait supprimer le code supplémentaire de vos pages, et vous n'aurez pas à désactiver le plug-in ou à modifier les fichiers de base. Les fonctions et le code que j'ai énumérés ci-dessus ne provoqueront pas non plus la rupture de votre thème si vous supprimez Contact Form 7 à l'avenir ...


Bonjour EAMann. Excellente solution - merci! Pensez-vous que cette méthode pourrait être enveloppée dans un plugin qui vérifie quels crochets sont utilisés, puis permet à quelqu'un de les désactiver en fonction de l'emplacement de la page?
Tal Galili

Malheureusement, il existe de nombreux crochets qui sont utilisés dynamiquement dans WordPress. Vous ne pouvez donc pas détecter de manière fiable les crochets utilisés ... mais vous pourriez probablement attraper la plupart d'entre eux de cette façon.
EAMann

Cool. vous venez de me donner une idée pour une nouvelle question: wordpress.stackexchange.com/questions/698/…
Tal Galili

Juste pour que vous le sachiez, vous m'avez également donné l'idée de commencer à développer ce plug-in :-)
EAMann

3
@EAMann et @Tal Galili - En fait, vous pouvez capturer tous les crochets, même les dynamiques en utilisant le allcrochet, voir wordpress.stackexchange.com/questions/307
MikeSchinkel
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.