По умолчанию WooCommerce отображает цену диапазона для вариативных товаров. Это может быть неудобно для покупателей, особенно если они хотят узнать цену отдельных товаров в каталоге а не разброс, который совершенно не дает понимания о цене единицы и затрудняет сравнение, вынуждая заходить в товар, выбирать вариант. Вместо этого можно назначить дефолтный вариант для каждого товара и показывать цену только для него, а подсказку рядом с ценой вывести при помощи плагина «Woocoomerce Extra Price Fields», например тогда мы увидим «10$ (1шт)», тогда как в вариациях может быть также упаковка, ящик, десяток и т.п.
Для решения этой задачи нам нужно выполнить следующие шаги:
- Создать фильтр для изменения цены вариативного товара.
- Определить, какой вариант является дефолтным.
- Вернуть цену дефолтного варианта.
// для вариативных товаров отображать цену вариации по умолчанию
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;
}
Если дефолтная вариация не задана, то отображается как и раньше диапазон цен.
