Как в woocommerce автоматически завершить заказ если он в статусе «processing»?

Решено

Здравствуйте, я использую плагины woocommerce и плагин кредитов myCRED для оплаты продуктов на сайте. Но у меня возникла проблема. в результате оплаты через myCred статус заказа(order) в woocommerce становится «processing», и приходится в ручную менять на статус «completed» — что бы платеж завершился. Скажите можно ли как то автоматически менять статус у order на «completed»?

Добавить Комментарий
Ответ

Следующий код будет автоматически переводить все заказы у которых статус «processing» в статус «completed«

 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);
 

Добавить Комментарий

Еще пример, который завершит ордер, когда произойдет переход на страницу «thankyou»(то есть после оплаты)

 /**
 * 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' );
 }
 

Добавить Комментарий

Добрый день! А куда вставлять тот и другой код? на какой странице?

В файл functions.php который расположен в папке с вашей темой(которую вы используете на сайте).

в 17.05.2016.
Добавить Комментарий

Получается если надо что бы после заказа статус оставался в процессе, код должен быть таким?

function wc_mark_all_orders_as_processing($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 ‘processing’;
}
return $order_status;
}
add_filter(‘woocommerce_payment_complete_order_status’, ‘wc_mark_all_orders_as_processing’, 10, 2);

Можно и так, но он по умолчанию в процессе

в 24.03.2017.
Добавить Комментарий

Разобрался, спасибо

Добавить Комментарий

Ваш ответ

Размещая свой ответ, вы соглашаетесь с правилами сайта.