# Verrouiller les champs non traduisibles WPML pour éviter les erreurs de stock

> Un stock produit se désynchronisait entre les versions traduites d'une même fiche WooCommerce, provoquant des ventes en rupture non détectées. Voici comment verrouiller durablement les champs qui ne doivent jamais diverger entre langues.

- Auteur : Clément Hadrot
- Publié le : 2023-06-19
- Mis à jour le : 2023-06-19
- Catégorie : Multilingue
- URL : https://wpmoderne.dev.wordpress-developpement.fr/multilingue/verrouiller-champs-non-traduisibles-wpml/

## L’essentiel

- Un champ de stock traduit indépendamment par langue crée un risque réel de survente
- WPML permet de synchroniser des champs personnalisés spécifiques entre traductions
- Une synchronisation mal configurée peut passer inaperçue pendant des mois

Un client vendant des compléments alimentaires en France et en Allemagne via un même site WooCommerce sous WPML nous a contactés après avoir constaté, sur un mois d'activité, onze commandes passées alors que le produit concerné était en réalité en rupture de stock depuis plusieurs jours. En creusant, la cause est apparue clairement : la fiche produit française et sa traduction allemande, bien que liées comme traductions l'une de l'autre dans WPML, géraient chacune leur propre valeur de stock, sans synchronisation entre les deux.

Un client passait commande sur la version allemande alors que le stock avait déjà été décrémenté à zéro côté version française, la synchronisation des ventes ne redescendant pas automatiquement d'une langue à l'autre.

## Comprendre pourquoi WPML ne synchronise pas le stock par défaut

Par conception, WPML traite une traduction de produit WooCommerce comme un article distinct en base de données, avec ses propres métadonnées. Certains champs, comme le prix ou la description, doivent légitimement pouvoir différer d'une langue à l'autre (stratégie tarifaire par marché, adaptation culturelle du texte). D'autres, comme le stock physique disponible, désignent une réalité unique qui ne devrait jamais être stockée deux fois de façon indépendante. WPML ne fait pas ce distinguo automatiquement : à chaque administrateur de configurer explicitement quels champs doivent rester synchronisés.

## Configurer la synchronisation via les réglages WooCommerce Multilingual

> L'essentiel à retenir : Un champ de stock traduit indépendamment par langue crée un risque réel de survente ; WPML permet de synchroniser des champs personnalisés spécifiques entre traductions ; Une synchronisation mal configurée peut passer inaperçue pendant des mois

Le module WooCommerce Multilingual (fourni avec WPML pour les sites e-commerce) propose, dans **WooCommerce → Réglages → Multilingue**, une section « Synchronisation » qui liste les champs pouvant être forcés identiques entre toutes les traductions d'un même produit : quantité en stock, statut de stock, SKU, poids et dimensions. Cocher la case correspondant au stock active une synchronisation automatique dès la prochaine modification du champ sur n'importe quelle traduction.

Pour un champ personnalisé non listé nativement (dans le cas de ce client, un champ ACF de « stock réservé » utilisé pour la gestion des précommandes), la déclaration passe par le fichier `wpml-config.xml`, avec l'attribut `action="copy"` qui force la même valeur sur toutes les traductions à chaque sauvegarde :

```
<wpml-config>
    <custom-fields>
        <custom-field action="copy">stock_reserve</custom-field>
    </custom-fields>
</wpml-config>
```

L'attribut `action="copy"` diffère de `action="translate"` (utilisé pour un champ qui doit, au contraire, avoir une valeur propre par langue) : le choix du bon attribut, pour chaque champ personnalisé du produit, est la décision centrale de cette configuration.

## Vérifier que la synchronisation s'applique bien en conditions réelles

Une synchronisation mal configurée, ou activée après coup sur un catalogue déjà en production, ne corrige pas automatiquement les écarts déjà existants entre langues au moment de son activation. Le test que nous appliquons systématiquement après configuration :

1. Modifier le stock d'un produit test sur sa version française, l'enregistrer, puis recharger la fiche allemande pour vérifier la valeur affichée.
2. Passer une commande test sur la version allemande et vérifier que le stock décrémenté apparaît immédiatement sur la version française.
3. Vérifier, pour un produit avec variations (taille, parfum), que la synchronisation s'applique à chaque variation individuellement, pas seulement au produit parent.
4. Comparer manuellement, sur un échantillon d'une vingtaine de produits déjà en catalogue avant l'activation, les valeurs de stock entre langues pour corriger les écarts hérités du passé.

> Une synchronisation de stock mal réglée ne se voit jamais dans l'administration au quotidien : elle se découvre en général au moment d'une rupture de stock non détectée, quand un client a déjà payé un produit indisponible.

## Les champs à ne surtout pas synchroniser par réflexe

Le risque inverse existe aussi : synchroniser par excès de prudence des champs qui devraient au contraire rester indépendants par langue. Le prix, en particulier, ne doit jamais être coché en synchronisation automatique si le client applique une stratégie tarifaire différenciée par marché (devise, taxes locales, positionnement concurrentiel). Une configuration copiée sans réflexion depuis un autre projet a d'ailleurs, chez un client précédent, forcé pendant plusieurs semaines le même prix en euros sur la version britannique du site, avant qu'un contrôle de routine ne le révèle.

## Ce que cet article ne traite pas

Ce sujet porte sur le verrouillage du stock et des champs assimilés entre langues. La gestion des attributs de variation eux-mêmes (taille, couleur, traduction des libellés d'attribut) répond à une logique distincte, déjà traitée séparément, et n'est pas reprise ici.

## En résumé

Le stock d'un produit WooCommerce multilingue doit être explicitement configuré comme un champ synchronisé entre toutes les traductions, via les réglages natifs de WooCommerce Multilingual pour les champs standards ou via `wpml-config.xml` avec `action="copy"` pour un champ personnalisé. Cette configuration doit être vérifiée en conditions réelles, produit et variation par variation, et les écarts hérités d'un catalogue déjà en production doivent être corrigés manuellement après activation.
