首页 文章

在结帐时禁用WooCommerce的AJAX

提问于
浏览
3

我想问一下如何在结帐页面(您输入运费和结算信息)中禁用AJAX,而不是使用AJAX根据您的位置更新购物车摘要,它会通过自然刷新进行更新 .

目前,只要用户通过送货地点切换其位置,购物车摘要就会自动更新,而无需重新加载页面 . 我想删除那个AJAX,只是让页面重新加载更新的信息 .

我不太确定我应该指出什么样的代码或方向,但我已准备好提供必要的任何细节 . 请告诉我!谢谢!!

5 回答

  • 9

    一种不禁用checkout.js的方法 .

    首先,有可能加载checkout.min.js而不是checkout.js .

    然后评论2行:

    update_checkout:function(){
        //b.reset_update_checkout_timer(),
        //b.updateTimer=setTimeout(b.update_checkout_action,"5")
    },
    

    然后你的结帐页面将是ajax免费!

  • 0

    所有WooCommerce字符串都使用 wp_localize_script 正确本地化,因此我认为您可以通过创建相应的.po / .mo文件来正确翻译它们,但我承认没有很多翻译经验 . 供参考:所有可用的语言包都是at Github,您可能还想阅读documentation .

    无论如何,结账脚本都在 checkout.js . 像任何脚本一样,只要您知道句柄,就可以通过wp_dequeue_script()将其出列 .

    function so_27023433_disable_checkout_script(){
        wp_dequeue_script( 'wc-checkout' );
    }
    add_action( 'wp_enqueue_scripts', 'so_27023433_disable_checkout_script' );
    
  • 1

    我有一个类似的问题,而不是删除整个脚本,我去看看事件何时创建,我发现了这一点 .

    $( document.body ).bind( 'update_checkout', this.update_checkout );
    

    读了一下之后,我发现由于命名空间我无法取消绑定,所以我联系了 on 事件,因为我无法阻止默认,我停止了事件的传播 .

    这些解决了我的问题 .

    jQuery(document.body).on('update_checkout', function(e){
        //e.preventDefault();
        //e.stopPropagation();
        e.stopImmediatePropagation();
        //console.log(e);
    });
    
  • -1

    如果您遵循checkout.js源代码的逻辑,您会注意到通过更改结帐表单's class name. Yes, I know, it'可以安全地禁用与编辑计费地址相关的这些AJAX操作 . 因此,而不是 form.checkout 使其成为 form.checkout1 ,其中 .checkout1 只是一个虚构的类名(它不必是真实的/存在的) .

    以下示例代码可帮助您了解所需内容:

    var default_class = 'checkout';
    var mask_class = 'checkout1';
    
    // hijack the form's AJAX by changing form's default class name
    $('form.'+default_class).addClass(mask_class).removeClass(default_class);
    
    // restore the original class name whenever you want it
    $('form.'+mask_class).addClass(default_class).removeClass(mask_class);
    

    请注意,这是一个没有记录的黑客 . 但是,他们可以随时更改结帐表单功能,因此请记住这一点 . 我可以确认它适用于WC 2.6.14,也可能在早期版本中 .

  • 0

    我们遇到了类似的问题:在quote list checkout加载了结帐脚本 . 通过另一个插件再次加载的脚本(WooCommerce Germanized) .

    我们的解决方案更明确:

    • 在页面上配置自定义字段,您不希望加载结帐脚本 .

    然后:

    add_action('wp_enqueue_scripts', 'myprefix_dequeue_woocommerce_checkout', 10000);
    
    function myprefix_dequeue_woocommerce_checkout() {
      if (get_post_meta(get_the_ID(), 'disable_woocommerce_checkout_scripts')) {
        wp_dequeue_script('wc-checkout');
        wp_dequeue_script('wc-gzd-checkout');
        wp_dequeue_script('wc-gzdp-checkout');
      }
    }
    

相关问题