问题描述
我需要一些帮助。我想实施,在满足某些条件时将现有优惠券添加到购物车。我的状况没有错。但是,当函数要为优惠券增加折扣时,wc-ajax=update_order_review
变为502。
但是,如果我做其他事情,例如更改地址或可以重新运行update_order_review
,它会变成200。update_order_review
成功运行,并且优惠券已添加到购物车。
到目前为止,这是我的功能代码,我也已经从stackoverflow论坛复制了一些代码
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
,它将应用代码
谢谢
解决方法
您是否在浏览器控制台或wp错误日志中获得任何有用的信息?
如果我还记得AJAX请求上的502正确,则意味着代码无法给您有效的答复。 嗯,我还没有一个有用的答案。
我对您的代码进行了一些重构,以提高可读性。
这应该与您的代码完全一样。
add_discount()
已重命名为apply_coupon()
-可以尝试。
<?php
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');
// remove code if already applied
if( in_array($coupon_code,$applied_coupons) ){
$cart->remove_coupon( $coupon_code );
}
if(
$method !== 'jne_shipping_test') &&
$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
$cart->apply_coupon( $coupon_code );
wc_clear_notices();
}
}
}