在我的基于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专家。 此致!
答案 0 :(得分:0)
在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' );
答案 1 :(得分:0)
对于正在寻找禁用 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__));
}