Избегайте сокращения запасов для заказов наложенным платежом со статусом обработки в Woocommerce
У меня проблемы со способом оплаты наложенным платежом, когда клиент заказывает... Заказ становится обработанным, и это сокращает запас товаров.
Основываясь на этой ветке ответов: Уменьшите запас только для определенных статусов заказа и способа оплаты в Woocommerce, я настроил код и попробовал этот скрипт:
add_filter( 'woocommerce_can_reduce_order_stock', 'wcs_do_not_reduce_processing_stock', 10, 2 );
function wcs_do_not_reduce_processing_stock( $reduce_stock, $order ) {
if ( $order->has_status( 'processing' ) && $order->get_payment_method() == 'cod' ) {
$reduce_stock = false;
}
return $reduce_stock;
}
Но это не работает.
Как можно избежать сокращения запасов на позиции заказа для заказов, используя способ оплаты "Оплата наложенным платежом" со статусом "обработка"?
1 ответ
Решение
Я немного изменил ваш код и добавил отсутствующий код, который уменьшит запас по состоянию "выполненного" заказа только для способа оплаты наложенным платежом:
add_filter( 'woocommerce_can_reduce_order_stock', 'processing_cod_stock_not_reduced', 20, 2 );
function processing_cod_stock_not_reduced( $reduce_stock, $order ) {
if ( ! $order->has_status( 'completed' ) && $order->get_payment_method() == 'cod' ) {
return false;
}
return $reduce_stock;
}
// Reduce stock on COD orders with completed status
add_action( 'woocommerce_order_status_completed', 'order_stock_reduction_based_on_payment_method', 20, 2 );
function order_stock_reduction_based_on_payment_method( $order_id, $order ){
if( $order->get_payment_method() == 'cod' && ! get_post_meta( $order_id, '_order_stock_reduced', true ) ){
wc_reduce_stock_levels($order_id);
}
}
Код помещается в файл function.php активной дочерней темы (или активной темы). Проверено и работает