Я хочу отменить этот вариант:
Всякий раз, когда кто-то делает и заказывает на моем сайте и успешный платеж, статус заказа автоматически изменяется от ожидающего обработки .
Однако я не хочу, чтобы эта функция была включена . Скорее, я хочу сделать это вручную, когда обрабатываю заказы.
Я нашел эту функцию в 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+ и работает.