Изменить статус заказа WooCommerce по умолчанию на обработку для платежей чеком и бэком

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

По умолчанию это поведение существует для заказов Paypal и COD, но не для BACS и Check, где статус по умолчанию — on-hold.

Я попробовал несколько фрагментов, подобных этому:

add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_process_order' );

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

    $order = wc_get_order( $order_id );
    $order->update_status( 'processing' );
}

Но это не работает, заказ по-прежнему отображается в статусе «на удержании», и уведомление об обработке по электронной почте не отправляется. Теперь я только что нашел этот фрагмент:

add_filter( 'woocommerce_bacs_process_payment_order_status', function( $status = 'on_hold', $order = null ) {
    return 'processing';
}, 10, 2 );

И это работает, но только для "БАКС". Как я могу адаптировать его для работы с заказами «Чек»?

🤔 А знаете ли вы, что...
PHP позволяет встраивать код в HTML-страницы с использованием специальных тегов <?php ?>.


3
4 495
3

Ответы:

Ты почти там. Прямо сейчас вы добавляете фильтр для крючка BACS. Есть аналогичный хук для Cheque способа оплаты.

Просто добавьте следующий код:

add_filter( 
  'woocommerce_cheque_process_payment_order_status',
  function( $status = 'on_hold', $order = null ) {
    return 'processing';
  }, 10, 2
);

Он делает то же самое, но только для Cheque заказов.


Решено

The filter hook woocommerce_cheque_process_payment_order_status is not yet implemented in Woocommerce 3.5.7 … if you look to the file located in your woocommerce plugin under:
includes > gateways > cheque > class-wc-gateway-cheque.php, the hook is missing (line 122):

$order->update_status( 'on-hold', _x( 'Awaiting check payment', 'Check payment method', 'woocommerce' ) );

But on Github WC version 3.5.7 for class-wc-gateway-cheque.php file, the hook exist (line 122):

$order->update_status( apply_filters( 'woocommerce_cheque_process_payment_order_status', 'on-hold', $order ), _x( 'Awaiting check payment', 'Check payment method', 'woocommerce' ) );

Планируется, что хук будет доступен в следующем выпуске WooCommerce 3.6, увидеть изменение файла на Woocommerce Github. Он помечен 3.6.0-rc.2 и 3.6.0-beta.1

Таким образом, можно будет изменить статус заказа по умолчанию на «в обработке» для способов оплаты «бакс» и «чек», используя следующее:

add_filter( 'woocommerce_bacs_process_payment_order_status','filter_process_payment_order_status_callback', 10, 2 );
add_filter( 'woocommerce_cheque_process_payment_order_status','filter_process_payment_order_status_callback', 10, 2 );
function filter_process_payment_order_status_callback( $status, $order ) {
    return 'processing';
}

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


Я не уверен на 100%, что это та же проблема, что и у меня - мне пришлось изменить Статус заказа для банковского перевода, чтобы он был таким же, как для оплаты через PayPal. Я сделал это с помощью этот плагин.

Вы можете создавать собственные статусы и определять статусы по умолчанию для конкретного шлюза. Я решил свою проблему всего за несколько кликов.