Изменяем цену программно (делаем скидку для авторизованных пользователей)

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

Ребята, на моём сайте есть супер-видеокурс по WooCommerce, всем рекомендую 🚀

Весь наш код будет состоять из двух хуков WooCommerce:

  • woocommerce_get_price_html – отвечает в основном за отображение цены,
  • woocommerce_before_calculate_totals – участвует в формировании общей суммы заказа.

Ну и код, конечно же, вы знаете, куда вставлять? Нет? … functions.php текущей или дочерней темы или произвольный плагин.

add_filter( 'woocommerce_get_price_html', 'truemisha_display_price', 25, 2 );
 
function truemisha_display_price( $price_html, $product ) {
 
	// ничего не делаем в админке
	if ( is_admin() ) {
		return $price_html;
	}
 
	// если цена пустая, тоже забиваем
	if ( '' === $product->get_price() ) {
		return $price_html;
	}
 
	// класс, это наш пользователь сайта, ему вешаем скидку 20%
	if ( wc_current_user_has_role( 'customer' ) ) {
		$price_html = wc_price( wc_get_price_to_display( $product ) * 0.80 );
	}
 
	return $price_html;
 
}
 
 
add_action( 'woocommerce_before_calculate_totals', 'truemisha_alter_price', 25 );
 
function truemisha_alter_price( $cart ) {
 
	// не делаем ничего в админке и если это не расчет через ajax
	if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
		return;
	}
 
	// не наш пользователь
	if ( ! wc_current_user_has_role( 'customer' ) ) {
		return;
	}
 
	// запускаем цикл для всей корзины и вешаем на каждый товар доп 20%
	foreach ( $cart->get_cart() as $cart_item_key => $cart_item ) {
		$price = $cart_item['data']->get_price();
		$cart_item['data']->set_price( $price * 0.80 );
	}
 
}

Пара моментов про код выше:

  • Сustomer – это стандартная роль покупателя WooCommerce.
  • Функция is_admin() возвращает false, если находимся в админке, true – во всех остальных местах сайта.
  • Функция wc_price() превращает обычное число в форматированную цену WooCommerce, с валютой, знаками после запятой и т.д.
  • woocommerce_before_calculate_totals работает не только в Корзине WooCommerce, но и на странице оформления заказа, не беспокойтесь.

Миша

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

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

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

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

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

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

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