Cómo sustituir el formato de rango de precios en WooCommerce para variaciones de productos.

En la anterior versión 2.0 de WooCommerce, cuando se trabajaba con variaciones de productos, se mostraba el siguiente formato de precio: “Desde: 60€“, donde 60€ era el precio de la variación de productos más barata. Al actualizar a la nueva versión 2.1 de WooCommerce, el precio para las variaciones de productos se muestra en formato de rango de valores, algo así: “60€ – 80€“, ahora 80€ sería el precio de la variación de producto más cara.

Rango de precios WooCommerce

El problema del rango de precios es que es muy confuso a primera vista y puede hacer que el cliente tome el mayor precio como referencia y acabe abandonando la compra. Para evitar que esto ocurra y mostrar de nuevo el formato de precio de la versión 2.0, Gerhard Potgieter publicó hace poco en su blog una solución muy sencilla que te presento a continuación.

La solución consiste en pegar el siguiente código snippet al final del archivo function.php de tu plantilla de WooCommerce.

/**
* Use WC 2.0 variable price format, now include sale price strikeout
*
* @param string $price
* @param object $product
* @return string
*/
function wc_wc20_variation_price_format( $price, $product ) {
// Main Price
$prices = array( $product->get_variation_price( ‘min’, true ), $product->get_variation_price( ‘max’, true ) );
$price = $prices[0] !== $prices[1] ? sprintf( __( ‘From: %1$s’, ‘woocommerce’ ), wc_price( $prices[0] ) ) : wc_price( $prices[0] );

// Sale Price
$prices = array( $product->get_variation_regular_price( ‘min’, true ), $product->get_variation_regular_price( ‘max’, true ) );
sort( $prices );
$saleprice = $prices[0] !== $prices[1] ? sprintf( __( ‘From: %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’, ‘wc_wc20_variation_price_format’, 10, 2 );
add_filter( ‘woocommerce_variable_price_html’, ‘wc_wc20_variation_price_format’, 10, 2 );