Вот фрагмент кода, основанный на этом < strong> thread. Мы используем здесь woocommerce_thankyou
(который запускается сразу после оплаты) для подключения нашей функции, конвертируя статус заказов 'processing'
в 'on-hold'
:
add_action( 'woocommerce_thankyou', 'custom_woocommerce_paid_order_status', 10, 1 );
function custom_woocommerce_paid_order_status( $order_id ) {
if ( ! $order_id ) {
return;
}
global $woocommerce;
$order = new WC_Order( $order_id );
// 'processing' orders status are converted to 'on-hold'.
if ( is_object($order) && $order->has_status( 'processing' ) {
$order->update_status( 'on-hold' );
}
return;
}
В своих условиях вы также можете настроить таргетинг на платежные шлюзы, например, здесь мы обходим 3 платежных шлюза и настраиваем таргетинг на определенный платежный шлюз с помощью "your_payment_gateway"
slug:
add_action( 'woocommerce_thankyou', 'custom_woocommerce_paid_order_status', 10, 1 );
function custom_woocommerce_paid_order_status( $order_id ) {
if ( ! $order_id ) {
return;
}
global $woocommerce;
$order = new WC_Order( $order_id );
// Bypass orders with Bank wire, Cash on delivery and Cheque payment methods.
if ( ( get_post_meta($order->id, '_payment_method', true) == 'bacs' ) || ( get_post_meta($order->id, '_payment_method', true) == 'cod' ) || ( get_post_meta($order->id, '_payment_method', true) == 'cheque' ) ) {
return;
}
// Target your "your_payment_gateway_slug" with this conditional
if ( is_object($order) && get_post_meta($order->id, '_payment_method', true) == 'your_payment_gateway_slug' && $order->has_status( 'processing' ) ) {
$order->update_status( 'on-hold' );
}
return;
}
Этот фрагмент кода находится в файле function.php вашей активной дочерней темы или темы.
Вы можете легко делать все, что захотите, и правильный вариант для оплаченных заказов - woocommerce_thankyou
.
Использованная литература:
person
LoicTheAztec
schedule
03.08.2016