WooCommerce изменить статус заказа Обработка BACS

В WooCommerce любой заказ, размещенный с помощью BACS (прямой банковский перевод), устанавливается на "on-hold".

Как можно изменить это автоматически на обработку?

Я не хочу работать внутри functions.php

У меня есть следующий код, но это не работает:

add_filter( 'woocommerce_payment_complete_order_status', 'rfvc_update_order_status', 10, 2 );

function rfvc_update_order_status( $order_status, $order_id ) {
$order = new WC_Order( $order_id );
if ( 'on-hold' == $order_status && 'on-hold' == $order->status ) {
return 'processing';
}
return $order_status;
}

Любая помощь будет отличной!

3

Решение

Обновить (добавлена ​​версия для woocommerce 3+ в конце)

Кажется, что woocommerce_payment_complete_order_status Хук действия не срабатывает при способе оплаты BACS.

На основе эта тема, 'woocommerce_thankyou' Действие Хук делает свою работу:

add_action( 'woocommerce_thankyou', 'bacs_order_payment_processing_order_status', 10, 1 );

function bacs_order_payment_processing_order_status( $order_id ) {
if ( ! $order_id ) {
return;
}

// Get an instance of the WC_Order object
$order = new WC_Order( $order_id );

if ( ( get_post_meta($order->id, '_payment_method', true) == 'bacs' ) && ('on-hold' == $order->status || 'pending' == $order->status) ) {
$order->update_status('processing');
} else {
return;
}
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы). проверено и работает.


Для версий woocommerce 3+:

Здесь мы используем аналогичный композитный крюк woocommerce_thankyou_{$order->get_payment_method()}:

add_action( 'woocommerce_thankyou_bacs', 'bacs_order_payment_processing_order_status', 10, 1 );
function bacs_order_payment_processing_order_status( $order_id ) {
if ( ! $order_id ) {
return;
}

// Get an instance of the WC_Order object
$order = wc_get_order( $order_id );

if ( in_array( $order->get_status(), array('on-hold', 'pending') ) ) {
$order->update_status('processing');
} else {
return;
}
}

Код помещается в файл function.php вашей активной дочерней темы (или активной темы). проверено и работает.

7

Другие решения

Попробуйте изменить код на это:

function rfvc_update_order_status( $order_status, $order_id ) {
$order = new WC_Order( $order_id );
if ( 'on-hold' == $order_status && 'on-hold' == $order->status ) {
$order->update_status('processing', 'order_note');
}
return $order_status;
}

Главное изменение здесь таково:

$order->update_status('processing', 'order_note');

Вы также можете добавить примечание к заказу, если хотите.

1

По вопросам рекламы [email protected]