J'utilise le code suivant pour ajouter la version ?ver=xxx
en fonction de la date de dernière modification du fichier dans css et js. Cela fonctionne bien, mais lorsque j'utilise des ressources externes, des erreurs surviennent, car get_theme_file_uri()
et get_theme_file_path()
ne fonctionnent plus.
//fonts.googleapis.com/...
//cdnjs.cloudflare.com/...
Est-il possible de résoudre ce problème? Peut-être ne pas avoir le ?ver
ou utiliser le WP système de gestion de versions par défaut ver=4.8
... pour les actifs distants.
Sinon, le code ci-dessous peut-il être légèrement simplifié, si possible?
function _enqueue_scripts() {
function style($handle, $file, $deps=array(), $media='all') {
$src = get_theme_file_uri($file);
$ver = md5(filemtime(get_theme_file_path($file)));
wp_enqueue_style($handle, $src, $deps, $ver, $media);
}
function script($handle, $file, $deps=array(), $in_footer='true') {
$src = get_theme_file_uri($file);
$ver = md5(filemtime(get_theme_file_path($file)));
wp_enqueue_script($handle, $src, $deps, $ver, $in_footer);
}
style('_normalize', '/assets/css/normalize.css');
style('_base', '/assets/css/base.css');
style('_fonts', '//fonts.googleapis.com/css?family=Open+Sans:400,600');
script('_lightbox2', '//cdnjs.cloudflare.com/ajax/libs/lightbox2/2.9.0/js/lightbox.min.js', array('jquery'));
script('_base', '/assets/js/base.js', array('jquery'));
if (is_singular() && comments_open() && get_option('thread_comments')) {
wp_enqueue_script('comment-reply');
}
}
add_action('wp_enqueue_scripts', '_enqueue_scripts');
La déclaration de fonctions dans des fonctions peut entraîner des problèmes, comme expliqué ici: https://stackoverflow.com/a/1631579/1228379
Pour résoudre le problème des fichiers distants, vous pouvez utiliser un paramètre supplémentaire pour indiquer qu'il est distant (ou local) et appeler get_theme_file_uri/path en conséquence. Vous pouvez également appeler directement wp_enqueue_script/style et utiliser des numéros de version standard ou simplement enregistrer les fichiers localement.
De plus, si vous le trouvez plus simple, vous pouvez également combiner les deux fonctions en une seule et transmettre certains paramètres sous forme de tableau associatif ($ args doit uniquement contenir les valeurs que vous souhaitez modifier):
function myenqueuer($handle, $src, $args) {
$defaults = array('type' => 'script',
'local' => true,
'deps' => array(),
'media' => 'all',
'in_footer' => true,
'ver' => false);
$args = wp_parse_args($args, $defaults);
if($args['local']) {
$args['ver'] = md5(filemtime(get_theme_file_path($src)));
$src = get_theme_file_uri($src);
}
if($args['type'] == 'style') {
wp_enqueue_style($handle, $src, $args['deps'], $args['ver'], $args['media']);
} else if($args['type'] == 'script') {
wp_enqueue_script($handle, $src, $args['deps'], $args['ver'], $args['in_footer']);
}
}
Vous l'appelleriez comme ceci:
myenqueuer('_normalize', '/assets/css/normalize.css', array('type'=>'style'));
myenqueuer('_base', '/assets/css/base.css', array('type'=>'style'));
myenqueuer('_fonts', '//fonts.googleapis.com/css?family=Open+Sans:400,600', array('type'=>'style', 'local'=>false));
myenqueuer('_lightbox2', '//cdnjs.cloudflare.com/ajax/libs/lightbox2/2.9.0/js/lightbox.min.js', array('deps'=>array('jquery'), 'local'=>false));
myenqueuer('_base', '/assets/js/base.js', array('deps'=>array('jquery')));