Woocommerce: ¿mostrar el precio de variación predeterminado en la lista de productos?
30 oct 2017, 11:41:14
Vistas: 24.2K
Votos: 3
¿Hay alguna manera de forzar que se muestre el precio de la Variación del Producto que configuré como predeterminada en la configuración de la página del producto, en lugar de mostrar los precios más bajos y más altos?
Tengo este código para mostrar solo un precio, pero el precio mostrado no es el precio de la variación predeterminada:
/*******************************
MOSTRAR SOLO UN PRECIO PARA VARIACIONES
*********************************/
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
Comentarios
Todas las respuestas a la pregunta
5
1
Prueba este código:
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 nov 2017 12:18:19
0
Esta es la solución para mostrar el precio mínimo como valor predeterminado en productos variables:
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 nov 2017 15:16:36
1
Actualización del código de @Abhinav para mostrar el precio mínimo cuando no hay una variación por defecto configurada:
/**
* Muestra el precio de la variación por defecto
* Si no hay variación por defecto, muestra el precio mínimo
*/
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 ); // no hay variación por defecto, mostrar precio mínimo
} 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 abr 2021 13:43:53
0
actualizando el código de @vivek ya que su código solo funciona para una sola variación
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;
}
Esto funcionará para múltiples claves de variación

Abhinav bhardwaj
109
31 jul 2019 21:39:58
Preguntas relacionadas
2
respuestas
2
respuestas