web-dev-qa-db-fra.com

Exclure l'URI externe pour les versions css et js

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');
1
Stickers

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')));
1
inarilo