覆盖WooCommerce前端Javascript
有人可以指导我什么是重写WooCommerce核心JavaScript文件,特别是前端文件的正确方法。我还没有找到任何关于此的文档并查看代码,前端脚本文件的路径在插件中是硬编码的,所以我怀疑在我的主题中放置资源文件夹会执行任何操作。覆盖WooCommerce前端Javascript
什么是最干净的方式,以便我可以加载位于我的主题目录中的文件?
谢谢
我有同样的问题,除了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');
添加本节进行到您的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');
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';
}
最后一个适合我,捆绑谢谢 – 2017-09-17 07:45:58
我喜欢'$ wp_scripts'选项,因为这样我不会打扰/需要打扰脚本依赖或版本等。+1 – 2017-10-04 05:49:32
这真是一个非常了不起的答案!我不知道你可以使用或者甚至有一个你可以修改的'$ wp_scripts'对象。这真太了不起了!我想给你买一瓶啤酒! – Radmation 2018-03-09 22:11:06
你想完全禁用它们的脚本,或覆盖:
这可以通过直接与包含和管理通过
wp_enqueue_script()
加载的所有脚本或登记wp_register_script()
$wp_scripts
全局对象工作来解决一个特定的行为或事件? – 2012-08-07 20:15:12嗯,我打算彻底改写javascript文件(add-to-cart-variation.js),因为我需要做很多更改。 – Sebastien 2012-08-07 20:36:48
在该文件中,它看起来好像只有两个事件被绑定到文档就绪。你可以在你自己的脚本中解除它们。第4行和第216行https://github.com/woothemes/woocommerce/blob/master/assets/js/frontend/add-to-cart-variation.js。我没有使用该插件,但我认为你也可以手动修改该文件。 – 2012-08-07 20:53:21