Seguimos con la nueva sección de snippets para Woocommerce, hoy descubriremos como quitar el molesto intervalo de precios que aparecen en los productos variables. Con esto conseguirás una ficha de producto mucho mas optimizada.
Si el precio es diferente en las variables saldrá algo así:

Esto confunde al cliente, puesto que, no sabe que se va a gastar en este producto. Además si lo ve desde el catálogo puede que no entre pensando que el precio es el más caro.
Cambiar el intervalo de precios en Woocommerce sin plugin
Lo ideal en estos casos es que se muestre el precio de la variación mas barata, acompañado de un texto explicativo. Como puede ser «Desde 8,49» o «A partir de»… Al igual que hacen las tiendas físicas.
Vete a tu Cpanel, FTP o en apariencia editor de temas y en el archivo functions.php de tu tema inserta al final el siguiente código:
// Quitar intervalo de precios por diegol.top
function diegol_variacion_precio_formato( $price, $product ) {
// Precio Normal
$prices = array( $product->get_variation_price( 'min', true ), $product->get_variation_price( 'max', true ) );
$price = $prices[0] !== $prices[1] ? sprintf( __( 'Desde: %1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );
// Precio Rebajado
$prices = array( $product->get_variation_regular_price( 'min', true ), $product->get_variation_regular_price( 'max', true ) );
sort( $prices );
$saleprice = $prices[0] !== $prices[1] ? sprintf( __( 'Desde/A partir de: %1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );
if ( $price !== $saleprice ) {
$price = '<del>' . $saleprice . '</del> <ins>' . $price . '</ins>';
}
return $price;
}
add_filter( 'woocommerce_variable_sale_price_html', 'diegol_variacion_precio_formato', 10, 2 );
add_filter( 'woocommerce_variable_price_html', 'diegol_variacion_precio_formato', 10, 2 );
Recuerda que puedes cambiar el título a partir de/desde desde la zona del código. ¡Aunque puedes poner el texto que prefieras!
Intervalo con IVA
Si tu tienda ofrece los productos con IVA incluido en WordPress te dejo el siguiente código con el añadido:
// Quitar intervalo de precios con IVA por diegol.top
function diegol_variacion_precio_formato( $price, $product ) {
// Precio Normal
$prices = array( $product->get_variation_price( 'min', true ), $product->get_variation_price( 'max', true ) );
$price = $prices[0] !== $prices[1] ? sprintf( __( 'Desde: %1$s I.V.A Incluído', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );
// Precio Rebajado $prices = array( $product->get_variation_regular_price( 'min', true ), $product->get_variation_regular_price( 'max', true ) ); sort( $prices ); $saleprice = $prices[0] !== $prices[1] ? sprintf( __( 'Desde: %1$s I.V.A Incluído', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] ); if ( $price !== $saleprice ) { $price = '<del>' . $saleprice . '</del> <ins>' . $price . '</ins>'; } return $price;
}
add_filter( 'woocommerce_variable_sale_price_html', 'diegol_variacion_precio_formato', 10, 2 );
add_filter( 'woocommerce_variable_price_html', 'diegol_variacion_precio_formato', 10, 2 );
Si quieres escribir el IVA con otro texto, ve a la zona del código y cambia el texto que aparece en el IVA incluído y aparecerá igual en tu ecommerce.
Insertándolo en el ejemplo anterior quedaría así:

Mostrar solo el precio más alto
También podemos añadir este código si queremos mostrar solo el precio de la variación más alta:
add_filter( 'woocommerce_variable_sale_price_html', 'diegol_variation_price_format', 10, 2 );
add_filter( 'woocommerce_variable_price_html', 'diegol_variation_price_format', 10, 2 );
function diegol_variation_price_format( $price, $product ) {
// Precio base
$prices = array( $product->get_variation_price( 'max', true ), $product->get_variation_price( 'min', true ) );
$price = $prices[0] !== $prices[1] ? sprintf( __( 'Hasta: %1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );
// Precio rebajado
$prices = array( $product->get_variation_regular_price( 'max', true ), $product->get_variation_regular_price( 'min', true ) );
sort( $prices );
$saleprice = $prices[0] !== $prices[1] ? sprintf( __( 'Hasta: %1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );
if ( $price !== $saleprice ) {
$price = '<del>' . $saleprice . $product->get_price_suffix() . '</del> <ins>' . $price . $product->get_price_suffix() . '</ins>';
}
return $price;
}
¿Mucho más práctico y usable no? Y estoy seguro que no te ha costado nada. Si tienes problemas no dudes en contactarme y te lo solucionaré encantado!
Videotutorial
También puedes proponerme más Snippets y funciones en Woocommerce, aunque revisa antes si ya lo tengo hecho en la sección de Snippets para Woocommerce.
Recordarte si que si quieres aplicar estas cosas a tu WooCommerce en mi servicio de desarrollo de tiendas en línea lo puedes tener.
hola es posible que al colocar este código no se pierda el sufijo? (en mi caso es «+iva»)
y mi otra consulta es que el codigo sirve en el producto individual pero no en la tienda ya que sigue mostrando los intervalos
Buenas Aldo, con el código tiene que salir igual en la ficha que en el catálogo de la tienda y demás, sino revisa si tu theme tiene otra configuración.
En el caso del IVA es cierto, actualizo el artículo para que sepas como ponerlo. Gracias por fijarte y cualquier duda extra coméntame!
Buenos días, Diego.
Quería preguntarte, y si no se quiere poner lo de DESDE.
Es decir que se vea el precio más económico pero sin el texto Desde.
¿Qué habría que cambiar en el código que indicas arriba?
Muchas gracias por tus aportaciones, son de gran utilidad.
un saludo
Muchas gracias por tus palabras Pilar.
Deberías quitar las zonas de testo donde pone Desde o a partir de… pero sin la variable numeral. Igualmente te lo dejo aquí sin el desde:
// Quitar intervalo de precios por diegol.top
function diegol_variacion_precio_formato( $price, $product ) {
// Precio Normal
$prices = array( $product->get_variation_price( 'min', true ), $product->get_variation_price( 'max', true ) );
$price = $prices[0] !== $prices[1] ? sprintf( __( '%1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );
// Precio Rebajado
$prices = array( $product->get_variation_regular_price( 'min', true ), $product->get_variation_regular_price( 'max', true ) );
sort( $prices );
$saleprice = $prices[0] !== $prices[1] ? sprintf( __( '%1$s', 'woocommerce' ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );
if ( $price !== $saleprice ) {
$price = '
' . $saleprice . '' . $price . '';}
return $price;
}
add_filter( 'woocommerce_variable_sale_price_html', 'diegol_variacion_precio_formato', 10, 2 );
add_filter( 'woocommerce_variable_price_html', 'diegol_variacion_precio_formato', 10, 2 );
Gracias, buen trabajo!!
y si quisiese mostrar el producto mas caro en lugar del mas barato? Gracias por el trabajo!
Hola Sebastián,
Gracias por tu comentario, he actualizado el post para mostrar el precio máximo del intervalo de un producto variable en WooCommerce, ya que en comentario no se quedaba bien.
Un saludo!
Hola Diego! Genial aporte! Por algún motivo cuando actualizo los precios, a unos nuevos, me sigue apareciendo desdepues del desde, el precio que tenía anteriormente luego de actualizar. Como soluciono esto? Ya borré cache y todo… Gracias!