0

之前,要在 Wordpress 中包含 jQuery,您必须这样做:

wp_enqueue_script('jquery');

但是,作为确保 jquery 尚未加载的一种方法,有些人会这样做:

function sp_load_jquery() {
    // only use this method is we're not in wp-admin
    if ( ! is_admin() ) {
        // deregister the original version of jQuery
        wp_deregister_script('jquery');
        // register it again, this time with no file path
        wp_register_script('jquery', "http" . ($_SERVER['SERVER_PORT'] == 443 ? "s" : "") . "://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js", false, null);
        // add it back into the queue
        wp_enqueue_script('jquery');
    }
}
add_action('template_redirect', 'sp_load_jquery');

许多人对此不以为然,他们认为 Wordpress 在 noConflict 模式下加载 jQuery。

但是,我的终极问题是,在 Wordpress 3.6+ 中,jQuery 似乎自动被 Wordpress 加入队列。有人可以告诉我是否是这种情况吗?

编辑

好的,所以有了下面的帮助和答案,这就是我现在所拥有的:

function sp_load_jquery() {
    if ( ! is_admin() && !wp_script_is( 'jquery' ) ) {
        wp_deregister_script('jquery');
        wp_register_script('jquery', "http" . ($_SERVER['SERVER_PORT'] == 443 ? "s" : "") . "://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js", false, null);
        wp_enqueue_script('jquery');
    }
}
add_action('wp_enqueue_scripts', 'sp_load_jquery');

add_action 在 Wordpress 触发 wp_enqueue_scripts 挂钩时加载 sp_load_jquery 函数。该函数然后检查用户是否没有查看管理员(因为 jQuery 是在那里自动加载的),并且还检查是否使用 Wordpresswp_script_js()函数加载了 jQuery。然后该函数使用 Wordpress 取消注册 jQuery,使用 Google 的 CDN 重新注册它,然后将 Google 版本发送回队列。

但是,如果您不想使用 Google 的 CDN,只需这样做:

function sp_load_jquery() {
    if ( ! is_admin() && !wp_script_is( 'jquery' ) ) {
        wp_enqueue_script('jquery');
    }
}
add_action('wp_enqueue_scripts', 'sp_load_jquery');
4

1 回答 1

3

您的示例不是要确保尚未加载 jQuery....更多的是要保证已加载的 jQuery 版本。

如果您正在编写插件,最好尝试编写它,记住 wordpress 将始终为每个版本更新到最新版本的 jQuery(这会破坏一些插件)。只需始终将 jquery 脚本排入队列(无需重新注册它),如果它已经排入队列,则再次执行此操作没有问题。

编辑:

要查看脚本是否入队,您可以:

$wpScripts = new WP_Scripts()
if($wpScripts->query('jquery','enqueued')){
    //it is loaded
}

if($wpScripts->query('jquery','registered')){
    //it has been registered
}
于 2013-09-18T14:23:28.723 回答