По умолчанию Woocommerce после получения оплаты переводит заказ в статус «Обработка». Когда в магазине продаются виртуальные товары, важно завершать заказ сразу, чтобы пользователь мог получить доступ к купленному продукту.
Вставьте этот код в functions.php, чтобы заказы завершались автоматически:
//Автозавершение заказа
add_action( 'woocommerce_thankyou', 'auto_complete_woocommerce_order' );
function auto_complete_woocommerce_order( $order_id ) {
if ( ! $order_id ) {
return;
}
$order = wc_get_order( $order_id );
$order->update_status( 'completed' );
}
Если в вашем магазине продаются не только виртуальные товары, будет полезно добавить в код проверку: есть ли в заказе виртуальные товары. Если есть — завершаем заказ. Если нет, заказ останется в статусе «Обработка»
// Автозавершение заказа, если в заказе есть хотя бы один виртуальный товар
add_action( 'woocommerce_thankyou', 'auto_complete_woocommerce_order' );
function auto_complete_woocommerce_order( $order_id ) {
if ( ! $order_id ) {
return;
}
// Получаем объект заказа по его ID
$order = wc_get_order( $order_id );
// Переменная для отслеживания наличия виртуальных товаров
$has_virtual = false;
// Перебираем все товары в заказе
foreach ( $order->get_items() as $item_id => $item ) {
// Получаем продукт по ID
$product = $item->get_product();
// Проверяем, является ли продукт виртуальным
if ( $product && $product->is_virtual() ) {
$has_virtual = true;
break;
}
}
// Если есть хотя бы один виртуальный товар, меняем статус заказа на "Завершен"
if ( $has_virtual ) {
$order->update_status( 'completed' );
}
}