Отключаем все поля адреса на странице оформления заказа, если в корзине только виртуальные товары

В принципе заголовок говорит сам за себя и дополнительное описание не требуется – мы будем использовать хук woocommerce_checkout_fields для отключения полей, но только добавим туда дополнительное условие.

Вообще про отключение полей на странице оформления заказа уже есть отдельный урок, можете почитать его здесь.

Про саму страницу оформления заказа вообще есть видеоурок, вот ссылка, рекомендую.

Отключаем поля на странице оформления заказа, если в корзине только виртуальные товары
Как видно на скриншоте, в корзине лежит только виртуальный товар, а из полей остались только Имя, Фамилия и Email.

А теперь код, который вы можете вставить либо в functions.php вашей текущей темы, либо в отдельный плагин.

add_filter( 'woocommerce_checkout_fields' , 'truemisha_checkout_for_virtual_products', 25 );
 
function truemisha_checkout_for_virtual_products( $fields ) {
 
	$is_only_virtual = true;
 
	foreach( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
		// если хотя бы один товар не виртуальный, то ничего делать не будем
		if ( ! $cart_item['data']->is_virtual() ) {
			$is_only_virtual = false;
			break;
		}
	}
 
	if( $is_only_virtual ) {
		// отключаем поле Компания
		unset( $fields[ 'billing' ][ 'billing_company' ] );
		// отключаем поле Адрес 1
		unset( $fields[ 'billing' ][ 'billing_address_1' ] );
		// отключаем поле Адрес 2
		unset( $fields[ 'billing' ][ 'billing_address_2' ] );
		// отключаем поле Населённый пункт
		unset( $fields[ 'billing' ][ 'billing_city' ] );
		// отключаем поле Почтовый индекс
		unset( $fields[ 'billing' ][ 'billing_postcode' ] );
		// отключаем поле Страна/регион
		unset( $fields[ 'billing' ][ 'billing_country' ] );
		// отключаем поле Область/район
		unset( $fields[ 'billing' ][ 'billing_state' ] );
		// отключаем поле Телефон
		unset( $fields[ 'billing' ][ 'billing_phone' ] );
	}
 
	return $fields;
}
  • Если вам интересно отключить другие поля, но вы не знаете их ключей в массиве, то можете распечатать его при помощи print_r(), если работаете на тестовом сервере.
  • На строках 7-13 мы сделали цикл через все товары в корзине и проверяли их «виртуальность» методом is_virtual(), вы вполне можете написать и другие условия для вашей задачи.

Миша

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

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

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

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