По умолчанию 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; }
Если дефолтная вариация не задана, то отображается как и раньше диапазон цен.