Новое обновление 2020 г.
Версия 3.4 WooCommerce представила гораздо лучший крючок, чем woocommerce_thankyou
или woocommerce_thankyou_bacs
, который позволяет изменять статус заказа по умолчанию для метода оплаты BACS.
Использование этого хука:
- четко облегчить необходимый код,
- Избегайте отложенного уведомления клиента при размещении заказа BACS.
Поэтому используйте вместо этого следующее:
add_filter( 'woocommerce_bacs_process_payment_order_status','filter_bacs_process_payment_order_status_callback', 10, 2 );
function filter_bacs_process_payment_order_status_callback( $status, $order ) {
return 'processing';
}
Код находится в файле functions.php активной дочерней темы (или активной темы). Проверено и работает.
Оригинальный ответ:
Обновление (в конце добавлена версия для 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 вашей активной дочерней темы (или активной темы). протестировал и работает.
person
LoicTheAztec
schedule
13.04.2016