ТОЛЬКО оплаченные заказы Automark до статуса "Завершено" в WooCommerce 3+

Хотелось бы, чтобы автопарк только успешно оплатил заказы до статуса «Выполнено». Я много искал в Stack и Google и нашел этот код ответа:
WooCommerce: Автозаполнение оплаченных заказов (в зависимости от способов оплаты)

Но проблема в том, что код помечает все размещенные заказы в статусе «Завершено» независимо от того, был ли заказ успешно размещен или нет.

Что мне нужно изменить в коде, чтобы автоматизировать ТОЛЬКО оплаченные заказы до статуса «Выполнено»?


person Doroti Henridgz    schedule 16.12.2018    source источник


Ответы (1)


Новая улучшенная и упрощенная версия кода замена (март 2019 г.):

См .: WooCommerce: автоматическое выполнение платных заказов


Исходный ответ:

Для Paypal и других сторонних шлюзов статус целевого заказа "оплачен" - "обрабатывается" (и "завершен"), поэтому вы можете слегка изменить код на:

add_action( 'woocommerce_thankyou', 'wc_auto_complete_paid_order', 20, 1 );
function wc_auto_complete_paid_order( $order_id ) {

    if ( ! $order_id )
        return;

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

    // No updated status for orders delivered with Bank wire, Cash on delivery and Cheque payment methods.
    if ( in_array( $order->get_payment_method(), array( 'bacs', 'cod', 'cheque', '' ) ) ) {
        return;
    // Updated status to "completed" for paid Orders with all others payment methods
    } elseif ( in_array( $order->get_status(), array('on-hold', 'processing') ) ) {
        $order->update_status( 'completed' );
    }
}

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

Таким образом вы избежите «неудавшихся», «отмененных» или «ожидающих» ордеров.

person LoicTheAztec    schedule 16.12.2018
comment
При добавлении вашего последнего кода появляется ошибка: } elseif ( in_array( $order->get_status(), array('on-hold', 'processing') ) { Также, когда неуспешное платежное поручение застряло в ожидании платежа и должно быть отменено, я думаю. - person Doroti Henridgz; 17.12.2018
comment
@DorotiHenridgz Извините, но этот код работает ... Строка кода в конце просто предлагается для тестирования и должна заменить существующую строку оператора elseif. - person LoicTheAztec; 18.12.2018