2012-08-07 107 views
21

有人可以指导我什么是重写WooCommerce核心JavaScript文件,特别是前端文件的正确方法。我还没有找到任何关于此的文档并查看代码,前端脚本文件的路径在插件中是硬编码的,所以我怀疑在我的主题中放置资源文件夹会执行任何操作。覆盖WooCommerce前端Javascript

什么是最干净的方式,以便我可以加载位于我的主题目录中的文件?

谢谢

+0

你想完全禁用它们的脚本,或覆盖:


这可以通过直接与包含和管理通过wp_enqueue_script()加载的所有脚本或登记wp_register_script()$wp_scripts全局对象工作来解决一个特定的行为或事件? – 2012-08-07 20:15:12

+0

嗯,我打算彻底改写javascript文件(add-to-cart-variation.js),因为我需要做很多更改。 – Sebastien 2012-08-07 20:36:48

+1

在该文件中,它看起来好像只有两个事件被绑定到文档就绪。你可以在你自己的脚本中解除它们。第4行和第216行https://github.com/woothemes/woocommerce/blob/master/assets/js/frontend/add-to-cart-variation.js。我没有使用该插件,但我认为你也可以手动修改该文件。 – 2012-08-07 20:53:21

回答

27

我有同样的问题,除了add-to-cart.js。简单的解决方案是DEQUUE的woocommerce脚本和ENQUEUE你的替代品。在我来说,我增加了以下我的functions.php:

wp_dequeue_script('wc-add-to-cart'); 
wp_enqueue_script('wc-add-to-cart', get_bloginfo('stylesheet_directory'). '/js/add-to-cart-multi.js' , array('jquery'), false, true); 

你会想离队的“WC-添加到购物车-变化”脚本。我不认为你 ENQUEUE具有相同的名称,但我看不出一个理由不。

希望这会有所帮助。

如果您使用WordPress版本4.0.1和WooCommerce版本2.2.10。您可以使用以下脚本:

 

wp_deregister_script('wc-add-to-cart'); 
wp_register_script('wc-add-to-cart', get_bloginfo('stylesheet_directory'). '/js/add-to-cart-multi.js' , array('jquery'), WC_VERSION, TRUE); 
wp_enqueue_script('wc-add-to-cart'); 
 
+4

用相同的名字排队会更好,所以你不会破坏它的任何依赖可能有。 – Leonel 2012-12-13 13:20:43

+2

如果尝试使用相同的句柄排队,那么原始文件仍然会被排入队列,除非在重新入队之前使用'wp_dequeue_script()'注销原始句柄。 – cfx 2014-09-01 18:16:12

+0

你可否请检查我的问题也http://workpress.stackexchange.com/questions/215238/how-to-add-quick-edit-in-woocommerce-order-section – 2016-01-23 13:40:21

1

添加本节进行到您的function.php

function themeslug_enqueue_script() { 
wp_enqueue_script('add-to-cart-variation', get_bloginfo('url'). '/wp-content/plugins/woocommerce/assets/js/frontend/add-to-cart-variation.js', false); 
} 
add_action('wp_enqueue_scripts', 'themeslug_enqueue_script'); 
19

WooCommerce负载前端脚本和样式在class-wc-frontend-scripts.php文件,并有可以发现脚本是如何注册,排队,本地化和依赖关系。

在Wordpress中排队脚本的首选位置是wp_enqueue_scripts动作钩子,因为那是在Wordpress完全加载之后但在执行任何输出之前的时刻。而且我喜欢将所有相关的脚本和样式排入代码的一个部分。

当您想要完全删除一些脚本时,调用wp_deregister_script()wp_dequeue_script()就足够了。但有时候,如果想进行一些更改并保留现有的依赖关系,变量和本地化,则会出现问题,因为插件会在主题之前加载。所以入队函数不会像你期望的那样工作。简单wp_dequeue_script() => wp_enqueue_script()not work,wp_deregister_script() => wp_register_script()将工作,但本地化的数据将丢失。

add_action('wp_enqueue_scripts', 'load_theme_scripts'); 

    function load_theme_scripts() { 
     global $wp_scripts; 
     $wp_scripts->registered[ 'wc-add-to-cart' ]->src = get_template_directory_uri() . '/woocommerce/js/wc-add-to-cart.js'; 
    } 
+0

最后一个适合我,捆绑谢谢 – 2017-09-17 07:45:58

+0

我喜欢'$ wp_scripts'选项,因为这样我不会打扰/需要打扰脚本依赖或版本等。+1 – 2017-10-04 05:49:32

+0

这真是一个非常了不起的答案!我不知道你可以使用或者甚至有一个你可以修改的'$ wp_scripts'对象。这真太了不起了!我想给你买一瓶啤酒! – Radmation 2018-03-09 22:11:06