Sur l'image ci-dessous, il montre le prix réduit et le pourcentage
Je n'ai trouvé aucune recherche de code personnalisé ayant cette fonctionnalité.
J'utilise le code ci-dessous pour afficher le prix réduit, mais le prix n'est pas formaté (le symbole monétaire et les décimales sont manquants):
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( __('<p class="saved-sale">Save: %s</p>', 'woocommerce' ), $product->regular_price - $product->sale_price );
else
return $price;
}
Comment afficher le prix réduit formaté correct? Comment puis-je afficher également le pourcentage réduit?
Toute aide est appréciée.
Votre code est un peu dépassé depuis la version 3 de woocommerce car les propriétés de l'objet produit ne sont pas accessibles directement. À la place, vous devez utiliser les WC_Product
méthodes disponibles.
Pour formater les prix, vous utiliserez wc_price()
fonction de formatage dédiée.
Vous pouvez maintenant avoir (3 possibilités) :
1) Le prix économique:
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( __('<p class="saved-sale">Save: %s</p>', 'woocommerce' ), $saving_price );
}
return $price;
}
2) Le pourcentage d'économie:
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( __('<p class="saved-sale">Save: %s</p>', 'woocommerce' ), $saving_percentage );
}
return $price;
}
3 Les deux (le prix réduit et le pourcentage) :
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( __('<p class="saved-sale">Save: %s <em>(%s)</em></p>', 'woocommerce' ), $saving_price, $saving_percentage );
}
return $price;
}
Le code va dans le fichier function.php de votre thème enfant actif (ou thème actif).
Testé et fonctionne.