WooCommerce - изменение статуса заказа с "на удержании" на "ожидает оплаты"

1 мар. 2017 г., 14:43:36
Просмотры: 33.7K
Голосов: 0

Я пытаюсь автоматизировать изменение статуса заказа с "на удержании" на "ожидает оплаты" после того, как продавец отметил заказ как выполненный. В настоящее время статус по умолчанию - "на удержании", когда создается заказ, и только после доставки товара требуется оплата. Возможно ли обновить статус на "ожидает оплаты" после выполнения определенного действия?

0
Все ответы на вопрос 4
0

Если вам нужно изменить статус заказа через PHP, вот как это сделать.

$order = new WC_Order($order_id);

if (!empty($order)) {
 $order->update_status( 'completed' );
}

Возможные значения: processing (в обработке), on-hold (на удержании), cancelled (отменён), completed (завершён)

Это взято из woocommerce/includes/abstracts/abstract-wc-order.php

3 июл. 2017 г. 13:07:01
1

Немного запоздало, но все же трудно найти...

Возможные значения

На основе https://www.bozzmedia.com/posts/get-know-woocommerce-status-definitions/

"processing, on-hold, cancelled, completed, pending, failed, refunded"

и это поддерживается в классе WooCommerce Order..
/woocommerce/includes/class-wc-order.php - Примерно около 108 строки.

При условии, что вы не используете плагин, способный добавлять больше статусов.

29 мая 2018 г. 06:08:03
Комментарии

как это отвечает на вопрос?

Mark Kaplun Mark Kaplun
29 мая 2018 г. 07:45:32
0

Это будет работать:

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

НО если вы используете этот код, изменение статуса может привести к тому, что письма не будут отправляться после поступления заказа, так как переход из статуса 'on hold' в 'pending' происходит слишком быстро, а WooCommerce не отправляет письма для статуса 'pending'. Я пробовал это, и через несколько дней письма перестали отправляться, хотя изначально все работало.

3 окт. 2021 г. 22:34:55
8
-1

Да, вы просто добавляете проверку, когда хотите изменить статус, внутри этой функции.

   add_action('woocommerce_order_status_changed','status_changed_processsing');
   function status_changed_processsing( $order_id, $checkout = null ) {
       global $woocommerce;
       $order = new WC_Order( $order_id );
       if(ваше условие здесь){

           //назначить статус для этого заказа
           $order->status = 'pending';
        }
   }
1 мар. 2017 г. 14:53:46
Комментарии

Привет sonalip3, спасибо за ответ! Я добавил свои условия, но код все равно не работает... add_action('woocommerce_order_status_changed','status_changed_processsing'); function status_changed_processsing( $order_id, $checkout = null ) { global $woocommerce; $order = new WC_Order( $order_id );
if( $order->status == 'on-hold' && $order->fulfillment_status == 'fulfilled' ){

       //назначить статус для этого заказа
       $order->status = 'pending';
    }

}

Gill Gill
1 мар. 2017 г. 15:27:17

Заходит ли код внутрь условия if, вы проверяли?

Sonali Sonali
2 мар. 2017 г. 06:44:17

Я протестировал его, используя только условие статуса 'on-hold', и он работает, если изменить назначение статуса заказа на: $order->update_status('pending'). Могу я спросить, мне нужно получить fulfillment_status из таблицы woocommerce_order_itemmeta, знаете ли вы, как я могу это сделать, используя тот же order_id?

Gill Gill
2 мар. 2017 г. 10:27:41

Я не знаю, какой плагин вы используете для 'fulfillment_status', поэтому просто попробуйте вывести $order и проверить объект заказа. Скорее всего, в объекте $order сохраняется этот fulfilment_status. Просто выведите это перед условием: echo '<pre>';print_r($order);exit; . Это даст вам объект заказа.

Sonali Sonali
2 мар. 2017 г. 10:54:15

Плагин - это Woocommerce product vendor plugin, откуда берется fulfillment_status. Как мне увидеть результаты вывода, чтобы получить объект заказа?

Gill Gill
2 мар. 2017 г. 11:42:30

Это платный плагин, верно? У меня его нет. Просто добавьте эту строку: echo '<pre>';print_r($order);exit; после этой строки: $order = new WC_Order( $order_id ); и проверьте, обновив статус. Это объект, в котором должен быть добавлен 'fulfillment_status'.

Sonali Sonali
2 мар. 2017 г. 12:16:39

Да, это плагин. Я добавил этот код, но при его запуске ничего не вижу. Как и где я могу увидеть результаты print_r echo?

Gill Gill
2 мар. 2017 г. 13:39:10

Вы проверили в базе данных, есть ли у вашего ID заказа 'fulfillment_status' в таблице woocommerce_order_itemmeta?... Потому что таблица woocommerce_order_itemmeta сохраняет данные элементов заказа, а не конкретного заказа.

Sonali Sonali
3 мар. 2017 г. 07:44:22
Показать остальные 3 комментариев