wp wc order_status list : cette commande liste les statuts de commande enregistrés dans une base WooCommerce. Sur la marketplace de poterie et de tissage Argilane, cette liste sert de point de départ à un problème précis : chaque atelier vendeur doit voir ses commandes dans sa propre langue, sans que personne n’ait à toucher au thème ou au code des autres vendeurs.
La marketplace regroupe des artisans francophones, néerlandophones et anglophones qui vendent sur la même installation WordPress, avec WooCommerce et une extension de marketplace multi-vendeurs. L’objectif n’est pas de traduire la boutique dans son ensemble, mais uniquement les statuts de commande visibles par chaque vendeur dans son tableau de bord.
Pourquoi ce cas ne se résout pas comme un site multilingue classique
Sur un site multilingue classique, un visiteur choisit sa langue et voit tout le site dans cette langue. Ici, la langue à afficher dépend du vendeur connecté, pas d’un choix de visiteur : un même statut de commande, « en cours de préparation », doit s’afficher en néerlandais pour un vendeur et en anglais pour un autre, au même instant, sur la même commande consultée depuis deux tableaux de bord différents.
Étape 1 : attacher une langue à chaque compte vendeur

La première étape consiste à stocker la langue préférée de chaque vendeur comme métadonnée utilisateur, via update_user_meta( $vendor_id, 'vendor_locale', 'nl_NL' ). Cette métadonnée sert de référence unique : elle ne dépend ni du réglage général du site, ni de la langue du navigateur du vendeur, ce qui évite les incohérences si un vendeur consulte son tableau de bord depuis un ordinateur mal configuré.
Étape 2 : intercepter le libellé du statut à l’affichage
Plutôt que de dupliquer les fichiers de statuts, on intercepte l’affichage avec le filtre woocommerce_order_status_name côté tableau de bord vendeur, en résolvant la langue à afficher à partir de la métadonnée du vendeur connecté :
add_filter( 'woocommerce_order_status_name', function( $label, $status, $order ) {
if ( ! is_admin() || ! function_exists( 'get_current_screen' ) ) {
return $label;
}
$vendor_id = get_current_user_id();
$locale = get_user_meta( $vendor_id, 'vendor_locale', true );
if ( ! $locale ) {
return $label;
}
switch_to_locale( $locale );
$translated = translate_with_gettext_context( $label, 'Order status', 'woocommerce' );
restore_current_locale();
return $translated;
}, 10, 3 );
La fonction switch_to_locale() change temporairement la locale active pour la durée du filtre, puis restore_current_locale() la remet en place. Cette bascule évite tout effet de bord sur le reste de la requête, y compris pour les autres vendeurs connectés sur le même serveur au même moment.
Étape 3 : ne pas oublier les notifications automatiques
Les statuts affichés dans l’interface ne sont qu’une partie du problème : les courriels de notification envoyés par WooCommerce à chaque changement de statut doivent suivre la même logique. Le hook woocommerce_email_headers ne suffit pas seul, il faut combiner un changement de locale au moment de la génération du courriel avec add_filter( 'determine_locale', ... ) pour les fonctions de traduction appelées pendant l’envoi.
- Vérifier que chaque courriel transactionnel respecte la langue du vendeur destinataire
- Ne jamais modifier les fichiers de traduction globaux de WooCommerce pour un seul vendeur
- Documenter la métadonnée
vendor_localedans le guide d’intégration de nouveaux vendeurs
Étape 4 : tester avec un vendeur réel par langue
Avant tout déploiement, créez un compte de test par langue supportée et passez une commande complète sur chacun, du panier jusqu’au remboursement partiel. Cette étape révèle souvent un statut personnalisé oublié, ajouté par une extension tierce sans traduction correspondante dans la locale visée.
Un statut personnalisé non traduit se repère toujours au même endroit : dans le courriel de confirmation, jamais dans l’interface d’administration qu’on a l’habitude de tester.
En résumé
Traduire des statuts de commande pour une marketplace multi-vendeurs ne demande ni fork du code des vendeurs, ni extension multilingue complète. Une métadonnée utilisateur, un filtre ciblé et une bascule de locale contrôlée suffisent à couvrir le cas, à condition de tester chaque langue avec une commande réelle avant de considérer le sujet clos.