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中的免费送货服务