WooCommerce: Показ цены только для вариации по умолчанию вместо диапазона цен.

По умолчанию WooCommerce отображает цену диапазона для вариативных товаров. Это может быть неудобно для покупателей, особенно если они хотят узнать цену отдельных товаров в каталоге а не разброс, который совершенно не дает понимания о цене единицы и затрудняет сравнение, вынуждая заходить в товар, выбирать вариант. Вместо этого можно назначить дефолтный вариант для каждого товара и показывать цену только для него, а подсказку рядом с ценой вывести при помощи плагина «Woocoomerce Extra Price Fields», например тогда мы увидим «10$ (1шт)», тогда как в вариациях может быть также упаковка, ящик, десяток и т.п.

Для решения этой задачи нам нужно выполнить следующие шаги:

  1. Создать фильтр для изменения цены вариативного товара.
  2. Определить, какой вариант является дефолтным.
  3. Вернуть цену дефолтного варианта.

// для вариативных товаров отображать цену вариации по умолчанию
add_filter('woocommerce_variable_sale_price', 'custom_variation_price', 10, 2);
add_filter('woocommerce_variable_price_html', 'custom_variation_price', 10, 2);

function custom_variation_price($price, $product) {
	$available_variations = $product->get_available_variations();

	foreach ( $available_variations as $variation )	{
		$isDefVariation=false;
		foreach($product->get_default_attributes() as $key=>$val){
			if($variation['attributes']['attribute_'.$key]==$val){
				$isDefVariation=true;
			}
		}
		if($isDefVariation){
			return $variation['price_html']; // отформатированная цена (со скидкой зачеркнута), это строка
		}
	}
    return $price;
}

Если дефолтная вариация не задана, то отображается как и раньше диапазон цен.

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

Ваш адрес email не будет опубликован.