Как изменить цену товара в корзине в зависимости от его количества в ней?

В этом уроке я поделюсь с вами сниппетом, который я использовал в одном из своих проектов ещё год назад. А делает он вот что:

Динамическая цена товара WooCommerce в зависимости от количества
Цена товара на скриншоте уменьшается в два раза, после того, как количество этих товаров в корзине становится больше трёх.

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

Итак, код для functions.php текущей или дочерней темы:

add_action( 'woocommerce_before_calculate_totals', 'truemisha_quantity_based_price' );
 
function truemisha_quantity_based_price( $cart_object ) {
 
 	// вообще всегда можно сделать print_r( $cart_object ); exit; если что-то не ясно
 
	$product_id = 35; // целевой ID товара с динамической ценой
 
	// тут необязательно крутить foreach, но я вот решил сделать так
	foreach ( $cart_object->get_cart() as $cart_id => $cart_item ) {
 
		if( $cart_item[ 'product_id' ] == $product_id ) {
			$quantity = $cart_item[ 'quantity' ];
			break;
		}
 
	}
 
	// если количество товара больше трёх, можно задать любое своё значение
	if( ! empty( $quantity ) && $quantity > 3 ) {
 
		// опять цикл, да
		foreach ( $cart_object->get_cart() as $cart_id => $cart_item ) {
 
			// если нужный товар
			if( $cart_item['product_id'] == $product_id ) {
 
				// я решил сделать скидку 50%
				$newprice = $cart_item['data']->get_regular_price() / 2;
 
				$cart_item['data']->set_price( $newprice );
 
			}
 
		}
	}
 
}

И как обычно, немного комментариев к коду.

  • На строке 9 я упомянул, что не обязательно крутить foreach() – в целом да, в не древних версиях WooCommerce можно попробовать воспользоваться методом generate_cart_id() и сразу обратиться к нужному товару в массиве корзины, есть примерный пример тут.
  • Помимо проверки на ID товара, вы можете например чекать категории товаров методом get_category_ids().

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

Миша

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

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

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

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

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

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