Voici le code que j'utilise dans mon fichier de fonctions:
add_action('init', 'sort_out_jquery_pngfix_frontend');
function sort_out_jquery_pngfix_frontend() {
global $wp_scripts;
if(!is_admin()) {
wp_deregister_script('jquery');
wp_register_script('jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js', array(), NULL, true);
wp_register_script('dd_belatedpng', get_stylesheet_directory_uri() . '/js/dd_belatedpng.js', array(), NULL, true);
$wp_scripts->add_data('dd_belatedpng', 'conditional', 'lt IE 7');
}
}
add_action('wp_print_scripts', 'register_theme_scripts');
function register_theme_scripts() {
if(!is_admin()) {
wp_enqueue_script('modernizr', get_stylesheet_directory_uri() . '/js/modernizr-1.7.min.js', array(), NULL, false);
wp_enqueue_script('googlemaps', 'http://maps.google.com/maps/api/js?sensor=false', array(), NULL, true);
wp_enqueue_script('jquery');
wp_enqueue_script('dd_belatedpng');
wp_enqueue_script('sc_wc_js', get_stylesheet_directory_uri() . '/js/function.js', array('jquery', 'dd_belatedpng'), '1.0', true);
}
}
J'utilise $wp_scripts->add_data('dd_belatedpng', 'conditional', 'lt IE 7');
pour ajouter une instruction conditionnelle à ce script, conformément à la documentation disponible en ligne, mais qui ne fonctionne pas. Le code conditionnel n'est pas affiché, mais le fichier js l'est.
Pourquoi ça ne marche pas?
À partir du code, cette condition ne semble être traitée que pour les styles et non pour les scripts.
C'est long, mais vous pouvez essayer registering le script, then en ajoutant le conditionnel, et then mettre le script en file d'attente:
// Register the script
wp_register_script( 'dd_belatedpng', get_stylesheet_directory_uri() . '/js/dd_belatedpng.js', array(), NULL, true );
// Attempt to add in the IE conditional tags
$wp_scripts->add_data('dd_belatedpng', 'conditional', 'lt IE 7');
// Enqueue the script
wp_enqueue_script( 'dd_belatedpng' );
Je ne sais pas si ça va marcher
MODIFIER
Sur la base du ticket Trac associé, il apparaît que $wp_scripts
ne prend pas en charge cette méthode.
Vous devrez peut-être simplement extraire le script du système wp_enqueue_script()
et faire écho à l'appel de script IE conditionnel à l'intérieur d'une fonction enfichable reliée à wp_print_scripts
ou wp_head
. Ce n'est certainement pas idéal, mais s'il s'agit d'un thème de client à usage unique, vous n'avez pas à vous soucier du fait que quelqu'un d'autre doit annuler l'enregistrement du script.
C’est le travail que j’ai dû mettre en place car WP ne prend pas en charge ce que j’essayais de faire.
functions.php
add_action('init', 'sort_out_jquery_pngfix_frontend');
function sort_out_jquery_pngfix_frontend() {
if(!is_admin()) {
wp_deregister_script('jquery');
wp_register_script('jquery', 'https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js', array(), NULL, true);
wp_register_script('dd_belatedpng', get_stylesheet_directory_uri() . '/js/dd_belatedpng.js', array(), NULL, true);
}
}
add_action('wp_print_scripts', 'register_theme_scripts');
function register_theme_scripts() {
if(!is_admin()) {
wp_enqueue_script('modernizr', get_stylesheet_directory_uri() . '/js/modernizr-1.7.min.js', array(), NULL, false);
wp_enqueue_script('googlemaps', 'http://maps.google.com/maps/api/js?sensor=false', array(), NULL, true);
wp_enqueue_script('jquery');
wp_enqueue_script('sc_wc_js', get_stylesheet_directory_uri() . '/js/function.js', array('jquery'), '1.0', true);
}
}
footer.php
<?php wp_footer(); ?>
<!--[if lt IE 7]>
<?php wp_print_scripts(array('dd_belatedpng')); ?>
<script>DD_belatedPNG.fix("img, .png_bg");</script>
<![endif]-->
Je viens de trouver une solution partielle à cela via $is_IE
dans wp-includes/vars.php!
function emporium_enqueue_scripts() {
global $is_IE;
if( $is_IE ) {
wp_register_script( 'emporium-focus' , get_template_directory_uri() . '/library/focus.js', '', '', true );
wp_enqueue_script( 'emporium-focus' );
}
}
add_action('init', 'emporium_enqueue_scripts');
Cela semble charger library/focus.js sur une base if IE
, mais rien dans le noyau ne permet de faire de IE conditions de version pour les scripts. On dirait qu'un ticket Trac sur le sujet a été mis de côté pour le moment.
On dirait que vous le mettez en bas de page. Avez-vous regardé à la fin de la page pour le fichier JS?
Cela fonctionne aussi pour les scripts. Mais seulement dans un cas: Si le script était registered
en premier. Vous ne pouvez pas aller directement pour enqueue
. Vous devrez faire: register
-> add_data
-> enqueue
. C'est à la fois pour les scripts et pour les styles que la même règle.
Voici un exemple de travail pour Wordpress 4.2 et supérieur.
Ce premier exemple a déjà reçu une réponse ici .
wp_register_script("ie_jshandle",
get_template_directory_uri() . "/js/jsSpecificIE.js",
array(),
'1.0',
false );
wp_enqueue_script("ie_jshandle");
wp_script_add_data("ie_jshandle", "conditional", "lt IE 9");
Vous pouvez également utiliser la variable $wp_scripts
comme ceci:
function wpse_20873_enq_scripts() {
global $wp_scripts;
wp_register_script("ie_jshandle",
get_template_directory_uri() . "/js/jsSpecificIE.js",
array(),
'1.0',
false );
wp_enqueue_script("ie_jshandle");
$wp_scripts->add_data("ie_jshandle", "conditional", "lt IE 9");
}
add_action("wp_enqueue_scripts", "wpse_20873_enq_scripts");