Intereting Posts
Как использовать Google Analytics для отслеживания открытых ставок, ставок по электронной почте? Как создать индикатор прогресса на стороне сервера в JavaScript? Как предотвратить межсайтовый скриптинг Принудительное поле не требуется Разбор CDATA из SOAP-ответа с PHP Передача массива в запрос с использованием предложения WHERE PHP – Объединение значений массива в новый массив, учитывая два массива с идентичными ключами «Public / index.php» записывается группой, в laravel Почему мы должны включать кавычку при вставке строковой переменной в базу данных mysql php Невозможно использовать возвращаемое значение функции в контексте записи preg_match возвращает одинаковые элементы только один раз Проблемы передачи данных между страницами PHP с помощью POST Zend_Cache: после загрузки кэшированных данных кодировка символов кажется испорченной Как обновить расширение curl PHP в Linux / Mac? PHP PDO подготовил заявления

Woocommerce отключает автоматическое изменение состояния заказа в ожидании-> обработки

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

Однако я не хочу, чтобы эта функция была включена . Скорее, я хочу сделать это вручную, когда обрабатываю заказы.

Я нашел эту функцию в woocommerce, которая делает эту функцию возможной. Я не хочу напрямую изменять его там, а скорее с помощью некоторого фрагмента PHP, который переопределяет эту функцию.

Вот функция, которую мне нужно изменить: http://woocommerce.wp-a2z.org/oik_api/wc_orderpayment_complete/

PS: Мне просто трудно это сделать правильно.

Добавьте следующий код в файл functions.php

 ja_order_status( $order_status, $order_id ) { $order = new WC_Order( $order_id ); if ( 'processing' == $order_status ) { return 'pending'; } return $order_status; } add_filter( 'woocommerce_payment_complete_order_status', 'ja_order_status', 10, 2 ); 

Протестировано на WooCommerce с Storefront, оплаченным через режим тестирования Stripe .

Обновить

Может быть, этот payment_complete() не участвует в процессе, который вы ищете. В качестве альтернативы, вы можете попробовать вместо этого использовать woocommerce_thankyou :

 add_action( 'woocommerce_thankyou', 'thankyou_order_status', 10, 1 ); function thankyou_order_status( $order_id ){ if( ! $order_id ) return; $order = new WC_Order( $order_id ); // Get an instance of the WC_Order object if ( $order->has_status( 'processing' ) ) $order-> update_status( 'pending' ) } 

Вы можете использовать один и тот же альтернативный крючок: woocommerce_thankyou_{$order->get_payment_method()} (заменяя $order->get_payment_method() путём ID метода оплаты)

Код идет в файле function.php вашей активной дочерней темы (или темы), а также в любом файле плагина.

Этот код тестируется на Woocommerce 3+ и работает.


Используя пользовательскую функцию, подключенную в woocommerce_valid_order_statuses_for_payment_complete , вы woocommerce_valid_order_statuses_for_payment_complete статусы требуемых заказов, которые могут быть выполнены связанной функцией payment_complete() которая отвечает за автоматическое изменение статуса заказа.

По умолчанию массив статусов заказов в фильтре:

 array( 'on-hold', 'pending', 'failed', 'cancelled' ). 

И мы можем удалить статус заказа «on-hold» следующим образом:

 add_filter( 'woocommerce_payment_complete_order_status', 'disable_auto_order_status', 10, 2 ); function disable_auto_order_status( $order_statuses, $order ) { $return array( 'pending', 'failed', 'cancelled' ); } 

Код идет в файле function.php вашей активной дочерней темы (или темы), а также в любом файле плагина.

Этот код тестируется на Woocommerce 3+ и работает.