Dificultad: Fácil
Este snippet muestra el precio más bajo en un producto de WooCommerce con variaciones de distinto precio. Puedes utilizar este sencillo snippet en php desde el archivo functions.php.
Importante: no modifiques directamente el archivo functions.php del tema que tengas instalado. Genera un tema hijo con alguno de los plugins del repositorio de WordPress y actívalo. Cuando lo tengas, entra en el functions.php del tema hijo. Una alternativa es instalar algún plugin que permite incrustar código sin problema de pérdida en la actualización del tema.
/**
* Mostrar solo el precio mínimo en productos variables,
* respetando la oferta de la variación más barata.
*/
add_filter( 'woocommerce_variable_price_html', 'mi_variable_price_min_oferta_misma_variacion', 10, 2 );
function mi_variable_price_min_oferta_misma_variacion( $price_html, $product ) {
if ( ! $product || ! is_a( $product, 'WC_Product_Variable' ) ) {
return $price_html;
}
$prices = $product->get_variation_prices( true );
if ( empty( $prices['price'] ) || ! is_array( $prices['price'] ) ) {
return $price_html;
}
/*
* Nos aseguramos de localizar la variación con menor precio activo
* sin asumir el orden interno del array.
*/
$display_prices = $prices['price'];
asort( $display_prices, SORT_NUMERIC );
$min_variation_id = array_key_first( $display_prices );
if ( ! $min_variation_id ) {
return $price_html;
}
$min_price = isset( $prices['price'][ $min_variation_id ] ) ? (float) $prices['price'][ $min_variation_id ] : null;
$min_regular_price = isset( $prices['regular_price'][ $min_variation_id ] ) ? (float) $prices['regular_price'][ $min_variation_id ] : null;
if ( null === $min_price ) {
return $price_html;
}
// Si esa variación concreta está rebajada, mostramos tachado + oferta.
if ( null !== $min_regular_price && $min_regular_price > $min_price ) {
return wc_format_sale_price(
wc_price( $min_regular_price ),
wc_price( $min_price )
);
}
// Si no está rebajada, mostramos solo el precio mínimo.
return wc_price( $min_price );
}
Nota: Este código respeta los precios en oferta, mostrando tachado el precio estándar del producto.