Скрываем способы доставки, если доступна бесплатная доставка

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

И в этом небольшом уроке мы с вами попробуем это реализовать при помощи сниппета для functions.php.

Если вы хотите немного расширить свои знания по WooCommerce и уметь гораздо больше, чем вставлять готовые сниппеты кода, то рекомендую вам мой видеокурс 🚀

Делать это мы будем при помощи фильтр-хука woocommerce_shipping_rates:

add_filter( 'woocommerce_package_rates', 'truemisha_remove_shipping_method', 20, 2 );
 
function truemisha_remove_shipping_method( $rates, $package ) {
 
	// удаляем способ доставки, если доступна бесплатная
	if ( isset( $rates[ 'free_shipping:1' ] ) ) {
	    unset( $rates[ 'flat_rate:2' ] );
	}
 
	return $rates;
 
}

free_shipping:1 и flat_rate:2 – это идентификаторы способов доставки, на разных сайтах они всегда разные, понятно, что вы можете узнать их прямо внутри этого хука при помощи print_r( $rates ), но есть и более мягкое решение:

Как узнать ID способа доставки в WooCommerce
Нужно лишь в браузере проинспектировать соответствующий элемент.

Как вы возможно догадались, то эти условия можно устанавливать не обязательно для бесплатных способов доставки, а вообще для любых других.

И да, не забудьте потом почистить кэш в админке, для этого переходим в WooCommerce > Статус > Инструменты и нажимаем соответствующую кнопку напротив транзитов WooCommerce.

И напоследок хочу показать вам чуть более универсальный код, который позволит скрыть все способы доставки в случае, если доступна бесплатная, и тут вам даже не придётся заморачиваться с поиском ID способов доставки:

add_filter( 'woocommerce_package_rates', 'truemisha_remove_all_shippings', 10, 2 );
 
function truemisha_remove_all_shippings( $rates, $package ) {
 
	$new_rates = array();
 
	// в цикле чекаем, если среди доставок есть бесплатная
	foreach ( $rates as $rate_id => $rate ) {
		if ( 'free_shipping' === $rate->method_id ) {
			$new_rates[ $rate_id ] = $rate;
			break; // бесплатную доставку нашли, выходим из цикла
		}
	}
 
	return ! empty( $new_rates ) ? $new_rates : $rates;
 
}

Миша

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

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

Комментарии — 18

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

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

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

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