Override WooCommerce Frontend Javascript

Override WooCommerce Frontend Javascript

本文关键字:Javascript Frontend WooCommerce Override      更新时间:2023-09-26

有人可以指导我覆盖WooCommerce核心Javascript文件的正确方法,特别是前端文件。我没有找到任何这方面的文档,查看代码,前端脚本文件的路径在插件中是硬编码的,所以我怀疑在我的主题中放置资产文件夹会做任何事情。

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

谢谢

除了添加到购物车.js之外,我遇到了同样的问题。 简单的解决方案是取消 wooCommerce 脚本的排队并将您的替换队列排队。 就我而言,我在函数中添加了以下内容.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-add-to-cart-variation"脚本的排队。 我认为您不必使用相同的名称排队,但我看不出有什么理由不这样做。

希望这有帮助。

如果您使用的是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');

WooCommerce class-wc-frontend-scripts.php文件中加载前端脚本和样式,可以找到脚本是如何注册,排队,本地化和依赖的。

在 Wordpress

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

当您想要完全删除某些脚本时,调用 wp_deregister_script()wp_dequeue_script() 就足够了。但是有时,如果要进行一些更改并保留现有的依赖项,变量和本地化,则会出现问题,因为插件是在主题之前加载的。因此,排队功能将无法按预期工作。简单wp_dequeue_script() => wp_enqueue_script()不起作用,wp_deregister_script() => wp_register_script () 将起作用,但本地化数据将丢失。


这可以通过直接使用全局对象来解决$wp_scripts该对象包含和管理通过wp_enqueue_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';
    }

将此部分添加到您的函数中.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' );