Le WordPress d'aujourd'hui, décodé pour les développeurs

Multilingue

Adapter les unités de mesure selon la langue active du visiteur

Un snippet commenté pour afficher les dimensions d'un équipement agricole en système métrique ou impérial selon la langue active du visiteur, sans toucher aux prix.

Par Clément Hadrot • 7 février 2026 • 4 min de lecture • Aucun commentaire
Adapter les unités de mesure selon la langue active du visiteur

Une largeur de travail de 6 mètres devient 19,7 pieds pour un client nord-américain, sans que la fiche produit ne change de valeur en base de données. C’est le problème posé par le fabricant de matériel de travail du sol Sillonex, qui exporte ses herses et ses déchaumeurs vers des marchés utilisant le système impérial, tout en gérant son catalogue WordPress en unités métriques.

La contrainte du projet excluait toute conversion des prix, uniquement les dimensions techniques : largeur, poids, profondeur de travail. Voici le snippet retenu, pensé pour convertir à l’affichage sans jamais toucher à la valeur de référence stockée en base.

Le principe : une seule valeur de référence, convertie à l’affichage

La règle de conception la plus importante consiste à ne stocker qu’une seule unité de référence par champ technique, en l’occurrence le système métrique, et à convertir uniquement au moment de l’affichage, selon la langue active du visiteur. Stocker deux valeurs parallèles, une métrique et une impériale, aurait créé un risque de désynchronisation à chaque mise à jour de fiche produit.

Associer le système d’unité à la langue, pas au marché de livraison

L'essentiel à retenir : Associer l'unité au visiteur, pas au produit ; Convertir à l'affichage, jamais dans la base de données ; Garder une seule valeur de référence par produit

Le choix du système d’unité suit la langue active déterminée par Polylang, via pll_current_language(), plutôt que le pays de livraison choisi dans WooCommerce. Ce choix se justifie par l’usage observé : un visiteur consultant le site en anglais s’attend à des dimensions en système impérial, indépendamment du pays de livraison finalement renseigné dans le formulaire de commande.

function sillonex_convertir_dimension( $valeur_metrique, $unite = 'm' ) {
    $langue_courante = function_exists( 'pll_current_language' )
        ? pll_current_language()
        : 'fr';

    $systeme_imperial = in_array( $langue_courante, array( 'en', 'en_US' ), true );

    if ( ! $systeme_imperial ) {
        return sprintf( '%s %s', number_format_i18n( $valeur_metrique, 1 ), $unite );
    }

    $facteurs = array(
        'm'  => array( 3.28084, 'ft' ),
        'kg' => array( 2.20462, 'lb' ),
        'cm' => array( 0.393701, 'in' ),
    );

    if ( ! isset( $facteurs[ $unite ] ) ) {
        return sprintf( '%s %s', number_format_i18n( $valeur_metrique, 1 ), $unite );
    }

    list( $facteur, $unite_imperiale ) = $facteurs[ $unite ];
    $valeur_convertie = $valeur_metrique * $facteur;

    return sprintf( '%s %s', number_format_i18n( $valeur_convertie, 1 ), $unite_imperiale );
}

Brancher la fonction sur l’affichage des champs personnalisés

Les dimensions techniques sont stockées comme champs personnalisés du produit, affichés dans un onglet dédié de la fiche produit WooCommerce. Le filtre woocommerce_product_tabs permet d’intercepter le contenu de cet onglet et d’y appliquer la fonction de conversion à chaque valeur numérique avant affichage, sans modifier la structure des champs personnalisés eux-mêmes.

  • Une seule valeur de référence en base, toujours en système métrique
  • Une fonction de conversion appliquée uniquement à l’affichage
  • Un arrondi à une décimale, suffisant pour des dimensions agricoles

Le cas particulier du tableau comparatif de gammes

Le site propose un tableau comparatif entre plusieurs modèles de la même gamme, où chaque ligne affiche une dimension différente. La fonction de conversion s’applique ligne par ligne au moment de la génération du tableau, ce qui garantit que l’ajout d’un nouveau modèle à la gamme n’exige aucune modification du code d’affichage, seulement l’ajout de la valeur métrique de référence dans la fiche produit correspondante.

Convertir à l’affichage plutôt qu’en base évite de devoir recalculer l’historique des fiches produit à chaque changement de facteur de conversion.

Variante : afficher les deux systèmes simultanément

Certains visiteurs, notamment des revendeurs habitués aux deux systèmes, préfèrent voir les deux unités affichées côte à côte. Une variante de la fonction accepte un paramètre $afficher_les_deux qui retourne la valeur métrique suivie de sa conversion entre parenthèses, une option activable via un filtre plutôt qu’imposée à tous les visiteurs.

En résumé

Adapter les unités de mesure selon la langue active repose sur un principe simple à respecter strictement : une seule valeur de référence stockée, une conversion appliquée uniquement à l’affichage. Ce choix évite toute dérive entre deux valeurs qui pourraient sinon diverger à la première mise à jour de fiche produit oubliée dans l’un des deux systèmes.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi