La communauté WP.SE a toujours recommandé l’utilisation de wp_register_script
et wp_enqueue_script
pour l’ajout de scripts dans un thème/modèle (de même que wp_register_style
et wp_enqueue_style
pour les feuilles de style).
C’est ainsi que j’enregistre et met en file d'attente mes scripts ...
D'abord, j'ajoute quelque chose comme ceci dans functions.php
add_action('init','wpse54189_register_script');
function wpse54189_register_script(){
//Register scripts
wp_enqueue_script( 'jquery' );
wp_register_script( 'aahan_bootstrap_transition', get_template_directory_uri().'/js/bootstrap-transition.js');
wp_register_script( 'aahan_bootstrap_carousel', get_template_directory_uri().'/js/bootstrap-carousel.js', array('aahan_bootstrap_transition'));
wp_register_script( 'wpse54189_ajax_comment', get_template_directory_uri().'/js/no-reload-comments.js');
}
puis appelez-le dans un fichier modèle (par exemple, header.php) comme ceci
<?php wp_enqueue_script( 'aahan_bootstrap_carousel' ); ?>
<?php wp_enqueue_script( 'wpse54189_ajax_comment' ); ?>
Maintenant, pour en venir au fait, comment puis-je enregistrer et mettre en file d'attente des "fichiers JavaScript conditionnels" qui doivent être reconnus par des navigateurs spécifiques? Par exemple:
<!--[if lt IE 9]>
<script src="<?php echo get_template_directory_uri(); ?>/js/html5.js" type="text/javascript"></script>
<![endif]-->
Comment puis-je m'inscrire et mettre cela en file d'attente correctement?
PS: J'utilise le thème Reddle , développé par les auteurs du thème de Automattic. Et header.php du thème utilise directement le code susmentionné - c’est-à-dire qu’il n’est pas mis en file d'attente. Alors, est-ce que ça veut dire que c'est la seule façon de le faire?
Les classes WP_Scripts
et WP_Styles
sont derrière les fonctions wp_enqueue_script
et wp_enqueue_style
. Si vous examinez l'implémentation des classes ( scripts et styles ), vous verrez que la classe WP_Scripts
ne prend en charge aucun type de script conditionnel, mais! vous pouvez voir que WP_Styles
fait! Le problème est que wp_enqueue_style
ne vous permet pas de configurer une condition.
Nous devons donc faire un petit hack:
add_filter( 'wp_enqueue_scripts', 'wpse2345_enqueue_scripts' );
function wpse2345_enqueue_scripts() {
wp_enqueue_style( 'mystyle', 'url/of/my/style.css', array(), '1.0.0' );
global $wp_styles;
$wp_styles->registered['mystyle']->add_data( 'conditional', 'lt IE 9' );
}
Un tel hack devient possible car tous les styles enregistrés sont stockés dans le champ registered
de la classe WP_Styles
. Chacun des styles enregistrés est un objet de la classe _WP_Dependency
, qui vous permet d'ajouter des données supplémentaires.
Malheureusement, ce hack ne fonctionne pas pour les scripts.
Informations complémentaires:
En fait, je parcourais le code dans (Essence Theme) d'Aaron Campbell hier soir et j'ai remarqué qu'il appelait à la fois un script et un style conditionnels pour navigateur.
/**
* @var WP_Scripts
*/
global $wp_scripts;
// Conditionally load this only for IE < 9
$wp_scripts->add_data( 'html5', 'conditional', 'lt IE 9' );
/**
* @var WP_Styles
*/
global $wp_styles;
// Conditionally load this only for IE < 8
$wp_styles->add_data( 'blueprint-ie', 'conditional', 'lt IE 8' );
Il y a aussi un ticket et patch mais il n'est pas encore dans le noyau }. Il est évident que le script conditionnel ne fonctionnera pas sans le correctif, mais il convient de noter que vous pouvez utiliser la méthode add_data directement dans votre fonction qui est attachée à l'action wp_enqueue_scripts
.