Woocommerce:如何在应用/删除优惠券时禁用 AJAX?

Posted

技术标签:

【中文标题】Woocommerce:如何在应用/删除优惠券时禁用 AJAX?【英文标题】:Woocommerce: how to disable AJAX on apply/remove coupon? 【发布时间】:2015-08-18 01:32:52 【问题描述】:

在我基于 woocommerce 的商店中,我将购物车和结帐页面合二为一,效果很好,但是当我尝试删除优惠券时出现问题。优惠券通过 AJAX 处理从购物车中删除,因此当删除完成时 - 页面不会重新加载,优惠券仍然显示为已应用(但实际上已被删除)。 所以我需要禁用 AJAX 来应用/删除优惠券功能。

我尝试将此代码添加到我的主题的 functions.php 中:

function disable_checkout_script()
wp_dequeue_script( 'wc-checkout' );

add_action( 'wp_enqueue_scripts', 'disable_checkout_script' );

它解决了我的问题,但此代码在结帐页面禁用了所有 AJAX,我想仅在应用/删除优惠券时禁用 ajax,并保存另一个 ajax 处理,如账单/运输字段验证。

请帮忙,很遗憾我不是 JS 专家。 问候!

【问题讨论】:

【参考方案1】:

在您的 JS 文件中,您需要删除几个事件处理程序。按下移除优惠券按钮以及提交优惠券表单时会触发一个事件。

相关行是woocommerce/assets/js/frontend/checkout.js 的第 381 - 383 行(WooCommerce 加载此文件的缩小版本)。

$( document.body ).on( 'click', 'a.showcoupon', this.show_coupon_form );
$( document.body ).on( 'click', '.woocommerce-remove-coupon', this.remove_coupon );
$( 'form.checkout_coupon' ).hide().submit( this.submit );

您需要删除 2 和 3。

将以下代码添加到您的 JS 文件中:

$( document.body ).off( 'click', '.woocommerce-remove-coupon', wc_checkout_coupons.remove_coupon );
$( 'form.checkout_coupon' ).off( 'submit' );

【讨论】:

【参考方案2】:

对于寻找禁用 AJAX 并强制刷新结帐页面的解决方案并看到这篇文章的其他人,我发现这对我有用,而无需在 WooCommerce 插件中编辑任何核心功能文件。请注意,它实际上并没有禁用 AJAX,但它会在移除后成功刷新完整的结帐页面。

jQuery 代码:这会在单击删除按钮后强制刷新页面 400 毫秒,以确保 AJAX 删除命令首先通过。

jQuery(document).on('click', '.woocommerce-remove-coupon', function () 
    setTimeout(
        function () 
            window.location.href = window.location.href;
        , 400);
);

然后将 .js 文件挂钩到结帐页面(添加到主题的 functions.php 或创建插件)。

我是这样做的:

add_action( 'woocommerce_after_checkout_form', 'remove_coupon');
function remove_coupon() 
    wp_enqueue_script('remove-coupon', plugins_url('remove-coupon.js', __FILE__));

【讨论】:

以上是关于Woocommerce:如何在应用/删除优惠券时禁用 AJAX?的主要内容,如果未能解决你的问题,请参考以下文章

如果在 Woocommerce 中应用了任何优惠券代码,请删除一些支付网关

Woocommerce 如何将优惠券表格移动到结帐页面的底部

检查是不是在 woocommerce 中应用了任何优惠券代码

php 如果在结账时使用优惠券,请删除WooCommerce中的免费送货服务

仅将 woocommerce 优惠券应用于购物车总数,而非税线

WooCommerce 优惠券如何存储在数据库中?