Изменение статуса заказа Woocommerce на основе платежного шлюза и статуса перехода - PullRequest
0 голосов
/ 23 февраля 2019

Итак, я знаю, как изменить статус в зависимости от платежного шлюза.Но есть ли способ также учесть статус предыдущего заказа?

Моя проблема заключается в следующем: мы начинаем обрабатывать наши заказы после того, как клиент подписывает электронный контракт.Затем они могут бесплатно оплатить через пару шлюзов (Stripe, COD, банковский перевод или счет-фактуру - мы отправляем платежные ссылки).

Это означает, что клиенты могут оплатить любой из наших статусов заказа (от ожидающих, ожидающих)подпись на обработку-неоплаченную, доставку-неоплаченную, завершенную и т. д.).

У нас также есть «Платные» версии этих статусов: обработка оплачена, доставка оплачена и т. Д.

Так, например: платежный шлюз Stripe вызывает статус «Обработка оплачена».Это хорошо, если предыдущий статус был «Обработка без оплаты».Однако, если мы продвигаемся дальше по этому процессу, скажем, после того, как мы уже произвели доставку, в идеале он должен измениться с «Неоплаченная доставка» на «Завершено».

Я не могу на всю жизнь понять, каксделай это.Есть идеи?

1 Ответ

0 голосов
/ 23 февраля 2019

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

В этом примере я нацеливаю статусы "от" delivery-unpaid и "до" delivery-paid для изменения статуса заказа на completed.

Как вы можете видеть в Woocommerce, статусы заказа - это слагы (все в нижнем регистре)

В то же время вы можете указать целевой идентификатор шлюза оплаты , например Stripe , используя что-то вроде:

add_action( 'woocommerce_order_status_changed', 'change_order_status_conditionally', 10, 4 );
function change_order_status_conditionally( $order_id, $status_from, $status_to, $order ) {
    if( $order->get_payment_method() === 'stripe' && $status_from === 'delivery-unpaid' && $status_to === 'delivery-paid' ) {
        $order->update_status( 'completed' );
    }
}

Код входит в файл function.php вашегоАктивная детская тема (или активная тема).Это должно работать.

Как видите, вы можете добавить столько операторов IF, которые нацелены на переходы статусов заказа, что вам необходимо изменить его на любой другой статус и платежные шлюзы.

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

...