【发布时间】:2023-03-18 17:38:01
【问题描述】:
我需要一些帮助。我想实现,在满足某些条件时将现有优惠券添加到购物车。我的情况没有任何问题。但是,当该功能要为优惠券添加折扣时,wc-ajax=update_order_review 变为 502。
但是,如果我进行其他操作,例如更改地址或可以重新运行 update_order_review 的操作,它会变为 200。update_order_review 成功运行并将优惠券添加到购物车。
这是我目前的功能代码,我也从*论坛复制了一些代码
add_action('woocommerce_before_calculate_totals', 'discount_based_on_weight_threshold');
function discount_based_on_weight_threshold( $cart ) {
if ( ! defined( 'DOING_AJAX' ) )
return;
// Your settings
$coupon_code = 'freeongkir8krpx'; // Coupon code
// Initializing variables
$applied_coupons = $cart->get_applied_coupons();
$coupon_code = sanitize_text_field( $coupon_code );
$methods = WC()->session->get( 'chosen_shipping_methods' );
$method = isset( $methods[ 0 ] ) ? $methods[ 0 ] : false;
$kupon = new WC_Coupon('freeongkir10k');
if($method !== 'jne_shipping_test'){
if($cart->get_subtotal() <= $kupon->get_minimum_amount()){
$user = wp_get_current_user();
error_log( 'CHECK USER ROLES');
error_log( print_r($user->roles, TRUE) );
if(in_array( 'administrator', (array) $user->roles )){
// Applying coupon
if( ! in_array($coupon_code, $applied_coupons) ){
$cart->add_discount( $coupon_code );
wc_clear_notices();
}
}
} else {
if( in_array($coupon_code, $applied_coupons) ){
$cart->remove_coupon( $coupon_code );
}
}
} else {
if( in_array($coupon_code, $applied_coupons) ){
$cart->remove_coupon( $coupon_code );
}
}
}
当我禁用$cart->add_discount( $coupon_code ); 时,它会成功运行,所以我很确定添加折扣是触发因素。
我使用的流程是
- 去结账,条件满足,
add_discount错误,另一个函数重新运行update_order_review,优惠券已应用。 - 更改运输方式,未满足条件,已应用的优惠券已删除
- 更改运输方式,条件满足,
add_discount错误,update_order_review变为 502,没有其他功能重新运行update_order_review,结帐订单审查中无限加载
那么我有任何错误的代码或流程吗?或者有任何方法可以欺骗错误,因为如果重新运行update_order_review,它将应用代码
谢谢
【问题讨论】:
标签: wordpress woocommerce coupon