# Un numéro de téléphone différent selon la langue active du visiteur

> Comment afficher automatiquement le bon numéro de contact selon la langue du visiteur, quand une mutuelle dispose de centres d'appel distincts par pays ?

- Auteur : WordPress Développement
- Publié le : 2022-01-19
- Mis à jour le : 2022-01-19
- Catégorie : Multilingue
- URL : https://www.wpmoderne.fr/multilingue/numero-telephone-different-langue-active-visiteur/

## L’essentiel

- Un shortcode conditionné par la langue active évite de dupliquer chaque gabarit
- Les numéros restent centralisés dans un seul tableau facile à maintenir
- Une valeur de repli protège l'affichage en cas de langue non prévue

Comment afficher automatiquement le bon numéro de téléphone de contact selon que le visiteur consulte la version française, belge ou luxembourgeoise d'un site de mutuelle santé, chacune de ces zones disposant de son propre centre d'appel et donc de son propre numéro ?

Le site utilisait Polylang pour ses trois variantes linguistiques et régionales. Le numéro de téléphone apparaissait initialement codé en dur dans une dizaine d'emplacements différents du thème : en-tête, pied de page, page de contact, pop-up d'assistance. Chaque ajout d'une nouvelle zone de contact obligeait à répéter la même logique conditionnelle, avec un risque d'oubli à chaque nouvelle mise en page.

## Le problème à résoudre

Centraliser la correspondance entre langue active et numéro de téléphone à un seul endroit du code, puis exposer cette information de façon réutilisable dans n'importe quel gabarit ou contenu éditorial, sans dupliquer la logique conditionnelle à chaque nouvel emplacement.

## Le snippet commenté

La solution retenue combine un tableau de correspondance et un shortcode, réutilisable aussi bien dans les gabarits PHP que directement dans le contenu édité par l'équipe marketing :

```
function mutuelle_numero_par_langue() {
    $numeros = array(
        'fr' => '01 23 45 67 89',
        'be' => '+32 2 345 67 89',
        'lu' => '+352 23 45 67 89',
    );
    $langue_active = function_exists( 'pll_current_language' ) ? pll_current_language() : 'fr';
    return isset( $numeros[ $langue_active ] ) ? $numeros[ $langue_active ] : $numeros['fr'];
}
add_shortcode( 'numero_contact', 'mutuelle_numero_par_langue' );
```

Le shortcode `[numero_contact]` peut alors être inséré directement dans un article, une page ou un gabarit via `do_shortcode()`, sans jamais recopier la logique conditionnelle. La valeur de repli, ici le numéro français, garantit qu'aucune zone du site n'affiche un champ vide si une langue imprévue venait à être ajoutée sans mise à jour immédiate du tableau.

> L'essentiel à retenir : Un shortcode conditionné par la langue active évite de dupliquer chaque gabarit ; Les numéros restent centralisés dans un seul tableau facile à maintenir ; Une valeur de repli protège l'affichage en cas de langue non prévue

## Utilisation dans les gabarits et le contenu

Dans un gabarit PHP, l'appel se fait directement via la fonction plutôt que via le shortcode, plus rapide à l'exécution :

```
<a href="tel:<?php echo esc_attr( str_replace( ' ', '', mutuelle_numero_par_langue() ) ); ?>">
    <?php echo esc_html( mutuelle_numero_par_langue() ); ?>
</a>
```

Pour l'équipe éditoriale, en revanche, le shortcode reste la voie la plus simple : il suffit de l'insérer dans le corps d'une page de contact traduite dans chacune des trois langues, sans intervention d'un développeur.

## Variantes possibles

- ajouter une adresse e-mail de contact au même tableau, affichée par un second shortcode sur le même principe
- déplacer le tableau de correspondance vers une page de réglages dédiée, éditable sans toucher au code, si les numéros changent fréquemment
- étendre la logique à un numéro affiché différemment selon qu'il s'agit d'un appel depuis un mobile ou un poste fixe, via une détection complémentaire côté gabarit

Une dernière variante, envisagée mais finalement écartée pour ce projet, consistait à stocker cette correspondance langue-numéro directement dans les réglages de personnalisation du thème, via l'API `Customizer`, afin de permettre à un administrateur non technique de modifier lui-même les numéros sans intervention d'un développeur. Le tableau codé en dur a finalement été préféré, les numéros de centres d'appel changeant en pratique très rarement, ce qui rendait l'investissement dans une interface de réglage disproportionné par rapport au besoin réel constaté sur ce site.

> Centraliser une correspondance langue-donnée dans une seule fonction, même simple, évite la dérive classique où chaque nouvelle page réinvente sa propre logique conditionnelle, avec les incohérences que cela finit toujours par produire.

## En résumé

Un shortcode combiné à un tableau de correspondance centralisé a remplacé une dizaine d'occurrences codées en dur par un point d'entrée unique, maintenable et réutilisable partout sur le site. Cette approche, simple à mettre en œuvre, s'adapte facilement à toute donnée de contact qui doit varier selon la langue ou la zone géographique du visiteur.
