Обычно wooCommerce должен автозаполнять заказы для виртуальных продуктов. Но это не так, и это настоящая проблема, даже BUG.
Итак, на данный момент вы можете найти полезные полезные вещи (но не очень удобные):
1) Код фрагмента (который вы можете найти в документах wooCommerce):
/** * Auto Complete all WooCommerce orders. */ 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 ); $order->update_status( 'completed' ); }
Но этот фрагмент не работает для BACS * , Pay on delivery и Check payment methods. Это нормально для способов оплаты шлюзов Paypal и Credit Card.
- отображение wordpress external ip, полученного от gae, в мой домен
- проблемы в создании расширенного поиска с использованием запроса
- Изотопная фильтрация с wordpress по категориям
- WordPress - добавление классов в wp_list_pages
- Добавить пользовательские поля в существующую форму на Dokan (wordpress / woocoomerce)
* BACS – это метод прямого банковского перевода
А также …
2) Плагин: Заказы Autocomplete WooCommerce
Этот плагин работает для всех способов оплаты, но не для других способов оплаты шлюзов кредитной карты .
Мой вопрос:
Используя (в качестве базы) фрагмент wooCommerce в пункте 1:
Как я могу реализовать условный код на основе способов оплаты woocommerce?
Я имею в виду что-то вроде: если методы оплаты не являются «BACS», «Pay on delivery» и «Check», тогда примените код фрагмента (статус обновления «завершен» для платных заказов, касающихся виртуальных продуктов).
Я не эксперт-кодекс wooCommerce mega, поэтому я еще не нашел, как настроить способы оплаты в заказах woocommerce.
Некоторая помощь будет очень приятной.
Благодарю.
Я нашел решение этой проблемы (работает с WC 3.0+) :
/** * AUTO COMPLETE PAID ORDERS IN WOOCOMMERCE */ add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_paid_order', 10, 1 ); function custom_woocommerce_auto_complete_paid_order( $order_id ) { if ( ! $order_id ) return; $order = wc_get_order( $order_id ); // No updated status for orders delivered with Bank wire, Cash on delivery and Cheque payment methods. if ( ( 'bacs' == get_post_meta($order_id, '_payment_method', true) ) || ( 'cod' == get_post_meta($order_id, '_payment_method', true) ) || ( 'cheque' == get_post_meta($order_id, '_payment_method', true) ) ) { return; } // "completed" updated status for paid Orders with all others payment methods else { $order->update_status( 'completed' ); } }
С помощью этого сообщения: Как проверить способ оплаты по заказу WooCommerce по id?
с этим: get_post_meta( $order_id, '_payment_method', true );
от helgatheviking
Банковский перевод, Наложенным платежом и Проверить способы оплаты игнорируются и сохраняют статус первоначального заказа.
благодаря
Обновлен код совместимости с WC 3.0+ (2017-06-10)