Muchas veces al personalizar un producto variable nos hemos topado que Woocommerce pinta el rango de precios desde el menor valor hasta el mayor valor de una forma no tan bonita. Queremos personalizarlo poniendo el menor valor nada más o quizás con alguna palabra como “Desde $12” o “Inicia en $45” o las miles de alternativas que se nos pueda ocurrir.
Existen muchos hooks que podemos usar para estos casos, ya que si vemos la función get_price_html() notamos que tenemos para elegir, sin embargo vamos a tomar el más común de todos, el hook woocommerce_get_price_html .
Si queremos que en vez del clásico rango de precios que suele salir, esta vez vamos a personalizarlo a que salga el menor valor primero, con un mensaje del tipo “Starting at $6”, para ello vemos el sgte código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
<?php add_filter('woocommerce_get_price_html','gowoo_get_price_html',10,2); function gowoo_get_price_html($price, $product ) { if( !$product->is_type( 'variable' ) ) return $price; $prices = $product->get_variation_prices( true ); $min_price = current( $prices['price'] ); $max_price = end( $prices['price'] ); // Return price if min is equal to max. if ( $min_price === $max_price ) { return $price; } return sprintf( __( 'Starting at %s', 'gowoo' ), wc_price( $min_price ) . $product->get_price_suffix() ); } ?> |
El producto trae 2 parámetro, el primero es el clásico rango de precios con todo HTML y el segundo es el objeto global $product , recuerda que debe llamarse de este modo sino te va a salir error.
Hacemos una condicional if( !$product->is_type( 'variable' ) ) pues esta función sólo aplica a productos variables
Obtenemos las variaciones activas y traemos el mínimo y el máximo precio que se encuentran al inicio y fin del array $prices respectivamente.
Si en caso el mínimo y máximo son iguales entonces no se trata de un producto variable, así que retornamos el mismo valor que nos fue enviado.
Y finalmente retornamos lo que queremos. Quiero tomar énfasis en que la función wc_price() lo envuelve en etiquetas HTML para que se vea más cool.
Si por ejemplo, además que es un producto variable quieres aplicarle sólo a productos que tienen descuento, puedes agregarle la condicional if ( $product->is_on_sale() )
Suscribete y tendrás los más recientes posts en tu email