Блокируем оплату нового заказа, если у пользователя уже есть неоплаченные

В этом уроке мы добавим проверку при оформлении заказа в WooCommerce – если у пользователя уже был создан заказ и не был оплачен, то не даём создать/оплатить ещё один.

На моём сайте есть также видеокурс по WooCommerce, в котором мы создаём тему для интернет-магазина с нуля на основе готовой HTML-вёрстки, вот ссылка на него.

Выводим ошибку, если у пользователя уже есть неоплаченный заказ
Эта ошибка будет появляться при нажатии на кнопку «Оформить заказ», если у пользователя уже имеются неоплаченные заказы.

Код ниже вы можете вставить в functions.php вашей текущей темы или создать плагин для этого.

add_action( 'woocommerce_after_checkout_validation', 'truemisha_validate_if_unpaid_order', 25, 2 );
 
function truemisha_validate_if_unpaid_order( $fields, $errors ) {
 
	// если пользователя не авторизован, ничего не делаем
	if( ! is_user_logged_in() ) {
		return;
	}
 
	// получаем все заказы пользователя со статусом 'wc-pending' (В ожидании оплаты) и wc-processing (обработка)
	$pending_orders = get_posts( array(
		'numberposts' => -1,
		'meta_key'    => '_customer_user',
		'meta_value'  => get_current_user_id(), // ID текущего пользователя
		'post_type'   => 'shop_order',
		'post_status' => array( 'wc-pending', 'wc-processing' )
	) );
 
	if ( $pending_orders ) {
		 $errors->add( 'validation', 'Похоже, что у вас уже есть неоплаченный заказ, пожалуйста авторизуйтесь и оплатите его!' );
	}
 
}
  • На сайте у меня уже есть несколько примеров, где мы созздавали произвольную валидацию при оформлении заказа хуком woocommerce_after_checkout_validation, например вот и вот.
  • Для проверки того, что пользователь авторизован, мы используем is_user_logged_in(), а ID пользователя получаем функцией get_current_user_id().
  • По поводу статусов заказов – я указал два статуса: wc-pending (В ожидании оплаты) и wc-processing (В обработке). Вы можете сами решить, использовать оба из них или только первый.

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.

Миша Рудрастых и WordPress

Полезности из мира WordPress и жизни студии.

Мой телеграм-канал