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

Мне нужно, чтобы WooCommerce отправлял платежи, сделанные чеком, в статус "обработка", а не в состояние "на удержании". Я попробовал приведенный ниже фрагмент, но, похоже, он не дал эффекта.

Вот мой код:

add_filter( 'woocommerce_payment_complete_order_status', 'sf_wc_autocomplete_paid_orders' );

function sf_wc_autocomplete_paid_orders( $order_status, $order_id ) {

$order = wc_get_order( $order_id );

if ($order->status == 'on-hold') {
    return 'processing';
}

return $order_status;
}

Как мне этого добиться?

Благодарю.

1 ответ

Решение

Вот функция, на которую вы смотрите woocommerce_thankyou крюк:

add_action( 'woocommerce_thankyou', 'cheque_payment_method_order_status_to_processing', 10, 1 );
function cheque_payment_method_order_status_to_processing( $order_id ) {
    if ( ! $order_id )
        return;

    $order = wc_get_order( $order_id );

    // Updating order status to processing for orders delivered with Cheque payment methods.
    if (  get_post_meta($order->id, '_payment_method', true) == 'cheque' )
        $order->update_status( 'processing' );
}

Этот код находится в файле function.php вашей активной дочерней темы (или темы), а также в любом файле плагина.

Это проверено и работает.


Связанная тема: WooCommerce: автоматическое заполнение оплаченных заказов (в зависимости от способов оплаты)

Я не хотел использовать фильтр " Спасибо" в случае, если на предыдущем шаге заказ все еще был установлен на " Ожидание", прежде чем изменить его на желаемый статус в фильтре (пользовательский статус в моем случае или " Обработка" в вашем). Итак, я использовал фильтр в шлюзе Check:

add_filter( 'woocommerce_cheque_process_payment_order_status', 'myplugin_change_order_to_agent_processing', 10, 1 );
function myplugin_change_order_to_agent_processing($status){
    return 'agent-processing';
}

Я надеюсь, что это поможет кому-то еще узнать, что есть еще один вариант.

Предыдущий ответ от LoicTheAztec устарел и дает ошибку при доступе к полям объекта непосредственно в объекте заказа.

Правильный код должен быть

add_action( 'woocommerce_thankyou', 'cheque_payment_method_order_status_to_processing', 10, 1 );
function cheque_payment_method_order_status_to_processing( $order_id ) {
    if ( ! $order_id )
        return;

    $order = wc_get_order( $order_id );

    // Updating order status to processing for orders delivered with Cheque payment methods.
    if (  get_post_meta($order->get_id(), '_payment_method', true) == 'cheque' )
        $order->update_status( 'processing' );
}
Другие вопросы по тегам