【问题标题】:When the wordpress plugin is activated, the local version of jquery does not work激活wordpress插件后,本地版jquery不起作用
【发布时间】:2018-03-29 12:32:12
【问题描述】:

WordPress 4.9.4。 默认 jquery 1.12.4 被 3.3.1 取代

wp_deregister_script('jquery');
wp_register_script('jquery', get_template_directory_uri() . 
'/libs/jquery/jquery-3.3.1.min.js', array(), '3.3.1', false);
wp_enqueue_script('jquery');

一切正常,但在激活插件“NextGEN Gallery”之后。我看到,在网站的头部,不是 3.3.1,而是 1.12.4:

<script type="text/javascript" src="http://test.loc/wp-includes/js/jquery/jquery.js?ver=1.12.4"></script>
<script type="text/javascript" src="http://test.loc/wp-includes/js/jquery/jquery-migrate.min.js?ver=1.4.1"></script>

我认为该插件将我的 jquery 版本重新映射到它的版本。 并在控制台中写道:

JQMIGRATE: Migrate is installed, version 1.4.1
javascript.js?ver=4.9.4:18 Uncaught TypeError: $ is not a function
at setVideoHeightHome (javascript.js?ver=4.9.4:18)
at initCustomJs (javascript.js?ver=4.9.4:89)
at javascript.js?ver=4.9.4:96

我还在我的自定义 js 中看到了页脚,忘记了是什么 - “$”。

最有意思的是,如果你从谷歌的CDN中添加一个版本,那就是:

wp_deregister_script('jquery');
wp_register_script('jquery', 
"https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js", false, '3.3.1');
wp_enqueue_script('jquery');

一切都像以前一样正常!但是本地版本不起作用。 其实问题。 这是为什么?为什么 CDN 有效,而本地 - 不,以及如何使本地副本再次工作?谢谢!

functions.php文件中主题/子主题中的代码

function javascripts_init() {
  wp_deregister_script('jquery');
  wp_register_script('jquery', get_template_directory_uri() . 
  '/libs/jquery/jquery-3.3.1.min.js', array(), '3.3.1', false);
  wp_enqueue_script('jquery');
  wp_enqueue_script('bootstrap', get_template_directory_uri() . 
  '/libs/bootstrap/js/bootstrap.min.js');
  wp_enqueue_script('custom', get_template_directory_uri() . '/javascript.js', 
  array(), false, true);

}

add_action( 'wp_enqueue_scripts', 'javascripts_init' );

【问题讨论】:

  • 您的代码来自您的主题/子主题,对吧?能提供注册最新版jquery的完整功能吗(带action)?
  • 是的,functions.php 文件中的主题/子主题中的代码 add_action( 'wp_enqueue_scripts', 'javascripts_init' );
  • 您在任何地方都有$.noConflict 吗?这可能是首先要尝试的事情:)

标签: jquery wordpress


【解决方案1】:

您的问题与插件 NextGEN Gallery 相关(正如您所提到的)。它使用global object scripts 和两个操作添加jquerywp_enqueue_scriptswp_print_scripts

您正在尝试将jquery 替换为操作wp_enqueue_scripts,该操作在第二个钩子之前触发。因此,在使用 wp_enqueue_scripts 更改您的 jquery 版本后,该插件会使用 wp_print_scripts 钩子触发其功能并回滚脚本版本。

所以,不要使用

add_action( 'wp_enqueue_scripts', 'javascripts_init' );

使用:

add_action( 'wp_print_scripts', 'javascripts_init');
//or with higher priority, if this will not help. Like
add_action( 'wp_print_scripts', 'javascripts_init', 20);

注意:将jquery 的默认版本替换为最新版本可能会引发很多插件、主题问题。只是因为它们都是在默认的 WordPress 脚本下开发的。

【讨论】:

    猜你喜欢
    • 2014-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-09
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    相关资源
    最近更新 更多