Muestra el precio con descuento y el porcentaje en productos de Woocommerce

En la imagen a continuación, muestra el precio con descuento y el porcentaje

No encontré ninguna búsqueda de código personalizada que tenga esta característica.

Estoy usando el código a continuación para mostrar el precio con descuento, pero el precio no está formateado (el símbolo de moneda y los decimales no aparecen):

add_filter( 'woocommerce_get_price_html', 'modify_woocommerce_get_price_html', 10, 2 ); function modify_woocommerce_get_price_html( $price, $product ) { if( $product->is_on_sale() && ! is_admin() ) return $price . sprintf( __('

Save: %s

', 'woocommerce' ), $product->regular_price - $product->sale_price ); else return $price; }

¿Cómo puedo mostrar el precio de descuento formateado correcto? ¿Cómo puedo mostrar también el porcentaje de descuento?

Cualquier ayuda es apppreciada.

Su código está un poco desactualizado ya que woocommerce versión 3 como propiedades del objeto Product no se puede acceder directamente. En su lugar, debe usar los métodos WC_Product disponibles.

Para formatear los precios, usará la función de formato dedicado wc_price() .

Ahora puedes tener (3 posibilidades) :

1) El precio de ahorro:

 add_filter( 'woocommerce_get_price_html', 'change_displayed_sale_price_html', 10, 2 ); function change_displayed_sale_price_html( $price, $product ) { // Only on sale products on frontend and excluding min/max price on variable products if( $product->is_on_sale() && ! is_admin() && ! $product->is_type('variable')){ // Get product prices $regular_price = (float) $product->get_regular_price(); // Regular price $sale_price = (float) $product->get_price(); // Active price (the "Sale price" when on-sale) // "Saving price" calculation and formatting $saving_price = wc_price( $regular_price - $sale_price ); // Append to the formated html price $price .= sprintf( __('

Save: %s

', 'woocommerce' ), $saving_price ); } return $price; }

2) El porcentaje de ahorro:

 add_filter( 'woocommerce_get_price_html', 'change_displayed_sale_price_html', 10, 2 ); function change_displayed_sale_price_html( $price, $product ) { // Only on sale products on frontend and excluding min/max price on variable products if( $product->is_on_sale() && ! is_admin() && ! $product->is_type('variable')){ // Get product prices $regular_price = (float) $product->get_regular_price(); // Regular price $sale_price = (float) $product->get_price(); // Active price (the "Sale price" when on-sale) // "Saving Percentage" calculation and formatting $precision = 1; // Max number of decimals $saving_percentage = round( 100 - ( $sale_price / $regular_price * 100 ), 1 ) . '%'; // Append to the formated html price $price .= sprintf( __('

Save: %s

', 'woocommerce' ), $saving_percentage ); } return $price; }

3 Ambos (el precio con descuento y el porcentaje) :

 add_filter( 'woocommerce_get_price_html', 'change_displayed_sale_price_html', 10, 2 ); function change_displayed_sale_price_html( $price, $product ) { // Only on sale products on frontend and excluding min/max price on variable products if( $product->is_on_sale() && ! is_admin() && ! $product->is_type('variable')){ // Get product prices $regular_price = (float) $product->get_regular_price(); // Regular price $sale_price = (float) $product->get_price(); // Active price (the "Sale price" when on-sale) // "Saving price" calculation and formatting $saving_price = wc_price( $regular_price - $sale_price ); // "Saving Percentage" calculation and formatting $precision = 1; // Max number of decimals $saving_percentage = round( 100 - ( $sale_price / $regular_price * 100 ), 1 ) . '%'; // Append to the formated html price $price .= sprintf( __('

Save: %s (%s)

', 'woocommerce' ), $saving_price, $saving_percentage ); } return $price; }

El código va en el archivo function.php de su tema hijo activo (o tema activo).

Probado y funciona.