27

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

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

谢谢

4

3 回答 3

34

除了 add-to-cart.js,我遇到了同样的问题。简单的解决方案是将 woocommerce 脚本出队并入队您的替代品。就我而言,我将以下内容添加到我的 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-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');

于 2012-11-27T02:33:43.250 回答
32

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

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

当您想完全删除某些脚本时,调用其中一个wp_deregister_script()wp_dequeue_script()就足够了。但有时如果想要进行一些更改并保留现有的依赖项、变量和本地化,则会出现问题,因为插件是在主题之前加载的。所以入队函数不会像你期望的那样工作。Simplewp_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';
    }
于 2014-03-25T23:39:26.860 回答
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' );
于 2013-11-20T04:43:24.267 回答