【问题标题】:How can I remove version query var from jquery include function in WordPress如何从 WordPress 中的 jquery 包含函数中删除版本查询变量
【发布时间】:2011-03-10 05:55:10
【问题描述】:

这里有几个类似的问题,但似乎没有一个可以解决我的具体情况,至少不是我发现的。这是我用来在我的 WP 主题中包含最新 jquery 版本并确保它出现在页脚中的代码。

function current_jquery($version) {
    global $wp_scripts;
    if ( ( version_compare($version, $wp_scripts -> registered[jquery] -> ver) == 1 ) && !is_admin() ) {
        wp_deregister_script('jquery');
        wp_register_script('jquery',
            'http://ajax.googleapis.com/ajax/libs/jquery/'.$version.'/jquery.min.js',
            false, $version, true);
    }
}
add_action('wp_head', current_jquery('1.5.1'));

然后我在 header.php 中使用 wp_enqueue_script("jquery"); 并且它可以工作,除了我得到一个以“jquery.min.js?ver=1.5.1”结尾的 jquery 包含,我想摆脱查询部分。

我检查了 wp_register_script 函数,并从我阅读的内容中删除了查询,我只需将最后一个变量的第二个替换为空白字符串“”。但是,当我这样做时,我会得到“默认”的 wordpress 版本,即“jquery.min.js?ver=3.0.1”(或当时可能发生的任何情况)。

因为我不是 100% 了解这里发生的一切(在 current_jquery、add_action 和 wp_enqueue_script 之间)我什至不确定从哪里开始($version 是否以某种方式被分配了 WP 版本值?)我所知道的是wp_register_script 似乎没有按照记录的方式响应版本输入。我在这里错过了什么?

我应该补充一点,我想避免在输出“src”字符串上使用字符串操作(split、reg_replace、what have you)来执行此操作,因为必须有更好的方法。

【问题讨论】:

  • 只是出于好奇——为什么要删除查询部分?
  • 我假设更多站点将使用 jQuery 的“手动”包含,因此他们将简单地引用“ajax.googleapis.com/ajax/libs/jquery/1.5. 1/jquery.min.js" 没有查询字符串。这意味着该文件将已经缓存在用户浏览器中,并且他们在访问我的网站时不需要再次下载它。查询字符串搞砸了。
  • 啊,是的,很有道理。

标签: jquery wordpress


【解决方案1】:

wp_register_script 上面的 cmets 建议传递 NULL 来禁用版本查询字符串:

 * @param string|bool $ver (optional) Script version (used for cache busting), set to NULL to disable

看起来它正在与 WP_Scripts 中的 null 进行明确比较:

 if ( null === $this->registered[$handle]->ver ) // Line 93 in 3.0

...所以我会传入null 而不是一个空字符串,然后看看你的进展如何。

【讨论】:

  • 当然!我觉得自己好傻。就是这样。从现在开始,我会更信任代码中的 cmets,而不是文档 :) 谢谢
  • @ilia 关于你唯一可以真正信任的就是代码本身 :) 不客气!
  • 非常好!我多年来一直在寻找这个.. :) 从来没有想过挖掘 WP 核心代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-17
  • 2011-09-19
  • 1970-01-01
  • 2019-04-03
  • 2018-01-31
  • 2020-06-24
  • 1970-01-01
相关资源
最近更新 更多