是否通过`unctions.php`解除jQuery与WooCommerce的连接?

时间:2012-03-05 作者:Brian

所以我用的是http://woothemes.com/woocommerce/ 电子商务插件,它在本地注册jQuery,与我从Google CDN默认的jQuery调用冲突。

这花了很长时间,但我将问题隔离到以下几行代码中woocommerce.php:

    $suffix = defined(\'SCRIPT_DEBUG\') && SCRIPT_DEBUG ? \'\' : \'.min\';
    $lightbox_en = (get_option(\'woocommerce_enable_lightbox\')==\'yes\') ? true : false;
    $chosen_en = (get_option(\'woocommerce_enable_chosen\')==\'yes\') ? true : false;
    $jquery_ui_en = (get_option(\'woocommerce_enable_jquery_ui\')==\'yes\') ? true : false;
    $scripts_position = (get_option(\'woocommerce_scripts_position\') == \'yes\') ? true : false;

    // Woocommerce.min.js is minified and contains woocommerce_plugins
    wp_enqueue_script( \'woocommerce\', $this->plugin_url() . \'/assets/js/woocommerce\'.$suffix.\'.js\', array(\'jquery\'), \'1.0\', $scripts_position );
    if ( defined( \'SCRIPT_DEBUG\' ) && SCRIPT_DEBUG ) {
        wp_enqueue_script( \'woocommerce_plugins\', $this->plugin_url() . \'/assets/js/woocommerce_plugins\'.$suffix.\'.js\', array(\'jquery\'), \'1.0\', $scripts_position );
    }
删除它们可以抵消重复的jQuery调用,这让我头痛不已。我有以下内容functions.php 将jQuery从标头中出列,但由于某种原因,它一直存在并拒绝离开!:/知道如何从内部终止本地jQuery调用吗functions.php? 我的代码有问题吗?:

// dequeue jquery from header

function theme_slug_dequeue_header_jquery() {
     wp_dequeue_script( \'jquery\' );
}
add_action( \'wp_header\', \'theme_slug_dequeue_header_jquery\', 11 );

3 个回复
最合适的回答,由SO网友:Mike Jolley 整理而成

实际上,似乎您调用jquery时出错了。您应该始终使用wp\\u enqueue\\u脚本,否则会引发冲突。不要手动调用它。

您从WooCommerce粘贴的行不会直接加载jquery,而是通过设置其他脚本的依赖项来加载它。其余由WordPress处理。

如果您想从CDN中使用jQuery,请取消注册它并在CDN版本中重新注册它。我不会将代码粘贴给您,而是将您引导到下面的示例,该示例解释了如何:

http://www.wpbeginner.com/wp-themes/replace-default-wordpress-jquery-script-with-google-library/

SO网友:ChowKaiDeng

我也遇到了类似的问题,无意中发现了这条线索。

我的问题是WooCommerce 2.0.5是自己注册jQuery的,这破坏了我自己的jQuery脚本,与我的函数产生了冲突。php取消注册/注册/排队进程。

几次尝试后,我注意到我的函数中没有包含jQuery版本。特别添加后,问题就解决了。

这就是woocommerce/woocommerce。php(第1214行):

public function check_jquery() {
    global $wp_scripts;

    // Enforce minimum version of jQuery
    if ( isset( $wp_scripts->registered[\'jquery\']->ver ) && $wp_scripts->registered[\'jquery\']->ver < \'1.7\' ) {
        wp_deregister_script( \'jquery\' );
        wp_register_script( \'jquery\', \'/wp-includes/js/jquery/jquery.js\', array(), \'1.7\' );
        wp_enqueue_script( \'jquery\' );
    }
}
这就是我在函数中重写它的方式。php文件

function my_scripts_method() {
    wp_deregister_script( \'jquery\' );
    wp_register_script( 
        \'jquery\', 
        \'http://code.jquery.com/jquery.js\',
        false, 
        \'1.9.1\' // IMPORTANT: declare jQuery version
        );
    wp_enqueue_script( \'jquery\' );
}  

add_action(\'wp_enqueue_scripts\', \'my_scripts_method\');
希望这可以帮助其他人:)

SO网友:IgniteWoo Team

使用此代码从任何插件中退出jQuery,假设使用wp\\u enqueue\\u script()函数将脚本排入队列。

add_action( \'wp_enqueue_scripts\', \'dequeue_jquery\', 999999 );

function dequeue_jquery() {
    wp_deregister_script( \'jquery\' );
    wp_register_script( \'jquery\', \'http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js\');
    wp_enqueue_script( \'jquery\' );
}
在大多数情况下,999999的优先级会导致函数被最后调用。

结束

相关推荐

WordPress入队脚本混乱(jQuery&Foundation.js)

在过去的几天里,我一直在努力构建一个主题,但我遇到了一堵墙。而我最初包括基金会。js作为一个排队脚本,我不记得为什么要添加它。今天,当我试图从我的函数中删除它(以提高页面加载速度)时。php文件,它弄乱了我所有的jQuery插件。经过一些研究,我发现Foundation已经包含了jQuery,所以我一次加载了它的两个实例(我也从主题的js文件夹加载)。所以,现在我已经移除了基础,我的习惯。除非我在前面加上“jQuery”而不是更简单的“$”,否则js文件命令不起作用。我想我的Wordpress安装中有一部