web-dev-qa-db-fra.com

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

J'aimerais faire en sorte 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 Formulaire de contact 7 que j’ai utilisé pour créer un formulaire sur une page de mon site (la page " me contacter "). Cependant, il ajoute les lignes suivantes à CHAQUE page/publication sur le site:

<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 laisse penser que ce plugin nuit au temps de chargement de mon site, pour une extension qui ne m'intéresse que sur une seule page du site.

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

9
Tal Galili

Les styles et les scripts sont toujours définis par les fonctions wp_enqueue_script() et wp_enqueue_style(), qui doivent être liées à un crochet d’action particulier pour pouvoir 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_scripts et wpcf7_enqueue_styles pour les ajouter aux crochets wp_print_scripts et wp_print_styles.

Vous devez donc déconnecter les scripts et les styles de chaque page but votre page de contact. L'action wp_head se déclenche avant les actions de script et de styles. Vous devez 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 () retournera true lorsque vous êtes sur la page de contact (en supposant que le nom est "me contacter") ... vous pouvez également utiliser le slug de page et l'ID de page pour le filtre. Sur toutes les autres pages, la condition if() ajoutera la fonction de suppression de script/style à l'action wp_head, qui se déclenche juste avant les actions wp_print_scripts et wp_print_styles.

Cela devrait supprimer le code supplémentaire de vos pages et vous n'aurez pas à désactiver le plug-in ni à modifier les fichiers de base. Les fonctions et le code énumérés ci-dessus ne provoqueront pas non plus la rupture de votre thème si vous supprimez le Formulaire de contact 7 à l'avenir, que ce soit ... sans avoir à vous soucier de la compatibilité des mises à jour futures.

9
EAMann