NowebNolife
@NowebNolife
Slowpoke App Developer

Как автоматически измененить статус заказа в Woocommerce?

Имеется сайт продажи контента по подписке используя рекуррентные платежи + плагин Woocommerce версии 4.1.1.
Проблема: После оплаты подписки статус заказа Woocommerce переходит в статус «В обработке», и приходится в ручную менять на статус заказа на «Выполнен» для активации подписки и предоставления клиенту доступа к контенту.
Требуется, чтобы статус заказа(после оплаты) автоматически менялся на «Выполнен», минуя статус «В обработке».
После ресёрча по интернету нашел несколько готовых функций, но они, к сожалению, не работают.
Пример:
function wc_mark_all_orders_as_complete($order_status, $order_id) {
 $order = new WC_Order($order_id);
 if ($order_status == 'processing' && ( $order->status == 'on-hold' || $order->status == 'pending' || $order->status == 'failed' )) {
 return 'completed';
 }
return $order_status;
 }
add_filter('woocommerce_payment_complete_order_status', 'wc_mark_all_orders_as_complete', 10, 2);

Также пытался использовать плагины для автоматической смены статусов заказа - всё тщетно. Заказам, после успешной оплаты, всегда присваивается статус «В обработке».
  • Вопрос задан
  • 5944 просмотра
Решения вопроса 1
NowebNolife
@NowebNolife Автор вопроса
Slowpoke App Developer
UPD:

Решил данную проблему, добавив данную функцию в functions.php

add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_order' );
    function custom_woocommerce_auto_complete_order( $order_id ) { 
        if ( ! $order_id ) {
            return;
        }
        $order = wc_get_order( $order_id );
        if( $order->has_status( 'processing' ) ) {
            $order->update_status( 'completed' );
        }
    }
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
billyOne
@billyOne
Энтузиаст из села
Если товары указать как виртуальные то для таких видов товара есть дополнение к WooCommerce, Orders Autocomplete.
https://wordpress.org/plugins/autocomplete-woocomm...
Я сам недавно делал проект и нужна была эта функция, чтоб после оплаты товар переводился в состояние Выполнен
Ответ написан
@zeaovede
Рабочее решение найденное в очке интернета. Публикую для себя, чтобы не потерять, но возможно кому-то пригодится.
add_filter( 'woocommerce_thankyou', 'update_order_status', 10, 1 );

function update_order_status( $order_id ) {
  if ( !$order_id ){
    return;
  }
  $order = new WC_Order( $order_id );
  if ( 'on-hold' == $order->status) {
    $order->update_status( 'pending payment' );
  }
  return;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы