#wordpress #woocommerce #coupon
#wordpress #woocommerce #купон
Вопрос:
Мне нужна помощь. Я хочу реализовать, добавить существующий купон в корзину, когда будут выполнены некоторые условия. У меня нет ничего плохого в этом условии. Но, когда функция собирается добавить скидку к купону, 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
Спасибо
Ответ №1:
Получаете ли вы какую-либо полезную информацию в консоли вашего браузера или в журнале ошибок wp?
Если я правильно помню, 502 в запросе AJAX означает, что код не может дать вам правильный ответ. Хм, у меня пока нет полезного ответа.
Я немного переработал ваш код, чтобы улучшить читаемость.
Это должно делать именно то, что делает ваш код.
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') amp;amp;
$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();
}
}
}
Комментарии:
1. Спасибо за вашу помощь. Я посмотрел на ошибку wp, но она ничего не показывает, кроме моего
error_log
кода отладки. И в консоли браузера у меня есть только тоPOST https://www.[mypage].com/?wc-ajax=update_order_review 502 (Bad Gateway)
, что я уже изменил add_discount на apply_coupon, но это не дало никаких изменений