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

В этом уроке мы добавим проверку при оформлении заказа в 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. Ведь WordPress – это лучший движок для разработки сайтов – как для тех, кто готов использовать заложенную структуру этой CMS, так и для тех, кто предпочитает headless решения.

Сам же я впервые познакомился с WordPress в 2009 году. Организатор WordCamp. Преподаватель в школах Epic Skills и LoftSchool.

Если вам нужна помощь с вашим сайтом или может даже разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда сделаем вам всё на лучшем уровне.

Оставить комментарий

Если вы хотите добавить код, не забудьте обернуть его в <pre lang="php"></pre>, если же код – меньше одной строчки, то можно и в <code></code>.