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

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

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

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

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

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