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

9

Je voudrais faire en sorte qu'un plugin limite le chargement de ses feuilles de style CSS et de ses 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 " contactez-moi "). 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 laisse penser que ce plug-in gêne le temps de chargement de mon site, pour une extension qui ne m'intéresse que sur une seule page du site.

Par conséquent, 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?

    
posée Tal Galili 22.08.2010 - 15:44

1 réponse

9

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 fonctionner. J’ai jeté un coup d’œil dans le formulaire de contact 7, et il semble qu’il utilise des balises d’action wpcf7_enqueue_scripts et wpcf7_enqueue_styles pour les ajouter aux points wp_print_scripts et wp_print_styles .

Ainsi, vous devez déconnecter les scripts et les styles de chaque page mais de votre page de contact. L'action wp_head est déclenchée avant les actions de script et de style. 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 () renverra 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 .

Ceci devrait supprimer le code supplémentaire de vos pages et vous ne devrez pas désactiver le plug-in ni modifier aucun fichier principal. De plus, les fonctions et le code énumérés ci-dessus ne provoqueront pas 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.

    
réponse donnée EAMann 22.08.2010 - 16:33

Lire d'autres questions sur les étiquettes