По умолчанию после того, как заказ оформлен и оплата успешна, ему присваивается статус «Обработка», затем администратор магазина должен вручную присвоить ему статус «Выполнен»
Не сомневаюсь, что в каких-то ситуацих это необходимо, например когда весь лайфтайм заказа фиксируется через админку, добавлены статусы например «Отправлен», «Доступен для отслеживания», а под «Выполнен» подразумевается, что заказ уже получен клиентом.
Но иногда это не нужно, например для виртуальных товаров, да даже для физических не всегда. А потом в один моментам клиентам надоедает вручную завершать заказы, и они копятся в уведомлениях тут:
Сейчас покажу вам сниппет кода, который при вставке в functions.php
вашей текущей (например дочерней) темы позволит завершать заказы сразу после их оформления.
Также хочу напомнить и порекомендовать вам свой видеокурс по WooCommerce 🚀
add_action( 'woocommerce_thankyou', 'truemisha_complete_orders' ); function truemisha_complete_orders( $order_id ) { if ( ! $order_id ) { return; } $order = wc_get_order( $order_id ); $order->update_status( 'completed' ); }
Взял этот пример с официальной документации WooCommerce и лично я сам не уверен на 100% относительно используемого тут хука woocommerce_thankyou
, потому что возможно при оплате некоторыми платёжными шлюзами, покупатель может до неё не дойти.
И поэтому я нашёл кое-что поинтереснее. И судя по названию, этот фильтр-хук предназначен именно для нашей цели!
add_filter( 'woocommerce_payment_complete_order_status', 'truemisha_complete_orders_2', 25, 2 ); function truemisha_complete_orders_2( $order_id, $order ) { return false; // false – Выполнен, true - Обработка }
Также внутри этой функции можете добавить своих условий, ведь вам доступен ID заказа $order_id
и объект заказа $order
.
Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.
Миша, спасибо! Классная статья.
Подскажи пожалуйста, это решение применимо как для физических так и для виртуальных товаров? В моём случае товары виртуальные. Необходимы ли какие-то дополнительные условия?
Пожалуйста!
По сути да, это для всех типов товаров, тут тебе понадобится добавить ещё одно условие, его можно сформировать примерно таким образом: