排除css和js版本的外部URI

时间:2017-06-11 作者:Stickers

我使用以下代码添加版本?ver=xxx 基于css和js的文件上次修改日期。它工作得很好,但当我使用外部资产时,它会出错,因为get_theme_file_uri(), 和get_theme_file_path() 再也不行了。

//fonts.googleapis.com/...
//cdnjs.cloudflare.com/...
有可能解决这个问题吗?也许没有?ver 或者使用WP默认版本控制系统ver=4.8 ... 而不是远程资产。

除此之外,如果可能的话,下面的代码可以稍微简化一下吗?

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 个回复
最合适的回答,由SO网友:inarilo 整理而成

在函数中声明函数可能会导致以下问题:https://stackoverflow.com/a/1631579/1228379

要解决远程文件的问题,可以使用其他参数来指示远程文件(或本地文件),并相应地调用get\\u theme\\u file\\u uri/path。或者,您可以直接调用wp\\u enqueue\\u script/style并使用标准版本号,或者只需在本地保存文件。

此外,如果您觉得更简单,还可以将这两个函数合并为一个函数,并将一些参数作为关联数组传递($参数只需包含要更改的值):

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\']);
    }
}
您可以这样称呼它:

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\')));

结束

相关推荐