Woocommerce: показать цену вариации по умолчанию в списке товаров?
30 окт. 2017 г., 11:41:14
Просмотры: 24.2K
Голосов: 3
Есть ли способ принудительно показывать цену вариации товара, которую я установил как по умолчанию в настройках страницы товара, вместо отображения минимальной и максимальной цены?
У меня есть этот код для отображения только одной цены, но показываемая цена не является ценой вариации по умолчанию:
/*******************************
ПОКАЗЫВАТЬ ТОЛЬКО ОДНУ ЦЕНУ ДЛЯ ВАРИАЦИЙ
*********************************/
add_filter('woocommerce_variable_price_html', 'custom_variation_price', 10, 2);
function custom_variation_price( $price, $product ) {
$price = '';
$price .= woocommerce_price($product->get_price());
return $price;
}

JPashs
177
Комментарии
Все ответы на вопрос
5
1
Попробуйте этот код:
add_filter('woocommerce_variable_price_html', 'custom_variation_price', 10, 2);
function custom_variation_price( $price, $product ) {
$available_variations = $product->get_available_variations();
$selectedPrice = '';
$dump = '';
foreach ( $available_variations as $variation )
{
// $dump = $dump . '<pre>' . var_export($variation['attributes'], true) . '</pre>';
$isDefVariation=false;
foreach($product->get_default_attributes() as $key=>$val){
// $dump = $dump . '<pre>' . var_export($key, true) . '</pre>';
// $dump = $dump . '<pre>' . var_export($val, true) . '</pre>';
if($variation['attributes']['attribute_'.$key]==$val){
$isDefVariation=true;
}
}
if($isDefVariation){
$price = $variation['display_price'];
}
}
$selectedPrice = wc_price($price);
// $dump = $dump . '<pre>' . var_export($available_variations, true) . '</pre>';
return $selectedPrice . $dump;
}

Vivek Athalye
399
3 нояб. 2017 г. 12:18:19
0
Это решение для установки минимальной цены по умолчанию для вариативных товаров:
add_filter('woocommerce_variable_price_html','shop_variable_product_price', 10, 2 );
function shop_variable_product_price( $price, $product ){
// Получаем минимальную обычную цену вариации
$variation_min_reg_price = $product->get_variation_regular_price('min', true);
if(!empty($variation_min_reg_price)) {
// Если есть минимальная цена вариации, используем её
$price = woocommerce_price( $variation_min_reg_price );
}
else {
// Иначе используем обычную цену товара
$price = woocommerce_price( $product->regular_price );
}
return $price;
}

Alexander Z.
148
2 нояб. 2017 г. 15:16:36
1
Обновление кода @Abhinav для отображения минимальной цены, если значение по умолчанию не установлено:
/**
* Показывает цену варианта по умолчанию
* Если вариант по умолчанию отсутствует, показывает минимальную цену
*/
add_filter('woocommerce_variable_price_html', 'custom_variation_price', 10, 2);
function custom_variation_price($price, $product) {
$available_variations = $product->get_available_variations();
$selectedPrice = '';
$dump = '';
$defaultArray = array();
foreach ($product->get_default_attributes() as $key => $val) {
// $dump = $dump . '<pre>' . var_export($key, true) . '</pre>';
// $dump = $dump . '<pre>' . var_export($val, true) . '</pre>';
$defaultArray['attribute_' . $key] = $val;
}
// $dump = $dump . '<pre>' . var_export($defaultArray, true) . '</pre>';
if (empty($defaultArray)) {
$price = $product->get_variation_price( 'min', true ); // если вариант по умолчанию отсутствует, показываем минимальную цену
} else {
foreach ($available_variations as $variation) {
// $dump = $dump . '<pre>' . var_export($variation['attributes'], true) . '</pre>';
$isDefVariation = false;
$result = array_diff($defaultArray, $variation['attributes']);
if (empty($result)) {
$isDefVariation = true;
$price = $variation['display_price'];
break;
}
}
}
$selectedPrice = wc_price($price);
// $dump = $dump . '<pre>' . var_export($available_variations, true) . '</pre>';
return $selectedPrice . $dump;
}

Stijn Sillen
11
10 апр. 2021 г. 13:43:53
0
обновление кода @vivek, так как его код работает только для одной вариации
add_filter('woocommerce_variable_price_html', 'custom_variation_price', 10, 2);
function custom_variation_price($price, $product) {
$available_variations = $product->get_available_variations();
$selectedPrice = '';
$dump = '';
$defaultArray = array();
foreach ($available_variations as $variation) {
// $dump = $dump . '<pre>' . var_export($variation['attributes'], true) . '</pre>';
$isDefVariation = false;
foreach ($product->get_default_attributes() as $key => $val) {
// $dump = $dump . '<pre>' . var_export($key, true) . '</pre>';
// $dump = $dump . '<pre>' . var_export($val, true) . '</pre>';
$defaultArray['attribute_' . $key] = $val;
}
**$result = array_diff($defaultArray, $variation['attributes']);**
**if (empty($result)) {
$isDefVariation = true;
$price = $variation['display_price'];
}**
}
$selectedPrice = wc_price($price);
// $dump = $dump . '<pre>' . var_export($available_variations, true) . '</pre>';
return $selectedPrice . $dump;
}
Этот код будет работать для нескольких ключей вариаций

Abhinav bhardwaj
109
31 июл. 2019 г. 21:39:58
Похожие вопросы
2
ответов