Image valant un long discours, voici à quoi ressemble le prix des variations WooCommerce pour les produits variables :

Lorsque les prix des variations sont différents, un simple tiret sépare le prix minimum du prix maximum et, personnellement je trouve que c’est pas super clair, je préfère un peu plus de précisions :

C’est plus clair comme cela, non ? Si vous êtes d’accord avec moi voici l’astuce. Il vous suffit d’ajouter ce petit filtre dans votre fichier functions.php de votre thème enfant :
add_filter('woocommerce_variable_sale_price_html', 'custom_variation_price_format', 10, 2);
add_filter('woocommerce_variable_price_html', 'custom_variation_price_format', 10, 2);
function custom_variation_price_format($price, $product) {
// Obtenir le prix minimum et maximum
$min_price = $product->get_variation_price('min', true);
$max_price = $product->get_variation_price('max', true);
// Si les prix min et max sont différents, utiliser le format "de ... à ..."
if ($min_price !== $max_price) {
$price = sprintf(__('De %1$s à %2$s selon les options', 'woocommerce'),
wc_price($min_price),
wc_price($max_price)
);
}
return $price;
}
Et le tour est joué ! Pour ceux qui aiment bien comprendre les choses, voici quelques explications sur la fonction sprintf() :
$price = sprintf(__('De %1$s à %2$s selon les options', 'woocommerce'),
wc_price($min_price),
wc_price($max_price)
);
Modèle de format :
La chaîne__('De %1$s à %2$s selon les options', 'woocommerce')
est le modèle utilisé pour formatter la sortie.- Les parties
%1$s
et%2$s
sont des marqueurs de position et de type.%1$s
signifie : la 1re valeur (fournie après le modèle) sera insérée ici et sera une chaîne de caractères (s
pour string).%2$s
signifie : la 2e valeur sera insérée ici et sera également une chaîne de caractères.
- Le texte statique reste tel quel dans la chaîne finale (ex. : “De”, “à”, “selon les options”).
- Les parties
Valeurs dynamiques :
- Les valeurs fournies après le modèle (dans cet exemple,
wc_price($min_price)
etwc_price($max_price)
) seront insérées dans les emplacements%1$s
et%2$s
. - Ces valeurs sont les prix minimum et maximum formatés en HTML par WooCommerce avec la fonction
wc_price()
.
- Les valeurs fournies après le modèle (dans cet exemple,
Traduction avec
__()
:- La chaîne est enveloppée dans
__()
pour rendre le texte traduisible. Cela permet aux développeurs ou traducteurs de fournir des versions localisées via des fichiers.po
ou.mo
.
- La chaîne est enveloppée dans
Résultat final :
- Si
$min_price = 10.00
et$max_price = 20.00
, alorswc_price()
formate les prix (par exemple, en ajoutant le symbole monétaire).
Exemple avec l’euro :wc_price($min_price)
→10,00 €
wc_price($max_price)
→20,00 €
sprintf()
produit alors la chaîne :"De 10,00 € à 20,00 € selon les options"
- Si
Pourquoi utiliser sprintf()
?
- Lisibilité et maintenance : Le texte statique et les valeurs dynamiques sont clairement séparés, facilitant la modification du format ou de l’ordre des valeurs.
- Positionnement dynamique des valeurs : Les numéros (
%1$s
,%2$s
) permettent de contrôler précisément où chaque valeur est insérée. Cela est particulièrement utile dans les langues où l’ordre des mots ou des phrases diffère. - Sécurité et validation : En spécifiant un type attendu (
s
pour string), PHP applique des conversions ou vérifie les types.