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

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

И в этом небольшом уроке мы с вами попробуем это реализовать при помощи сниппета для 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;
 
}

Миша

В последние годы я долго не знал, что мне делать с сайтом misha.blog, ведь он практически не приносит никакого профита, но недавно я осознал, что моя миссия – способствовать распространению WordPress. Ведь WordPress – это лучший движок для разработки сайтов – как для тех, кто готов использовать заложенную структуру этой CMS, так и для тех, кто предпочитает headless решения.

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

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

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

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