WooCommerce : Modifier et traduire les endpoints de votre sous-menu
Si vous utilisez WooCommerce comme moteur de boutique en ligne, vous devriez rencontrer un problème de traductions au niveau du sous-menu de compte utilisateur. Oui, toutes les traductions du plugin semblaient parfaites mais vous voilà face à cette petite problématique.
On se retrouve alors avec des éléments du type…
- Dashboard
- Addresses
- Downloads
- Account details
… non administrables.
WooCommerce permet dans ses paramètres de personnaliser les slugs de ces sections mais ne permets pas de les renommer. Au delà de la simple traduction, nous voulons peut-être supprimer certaines sections, voire en ajouter de nouvelles.
À l’origine, les endpoints de WooCommerce sont visibles dans le fichier /wp-content/plugins/woocommerce/includes/wc-account-functions.php
/**
* Get My Account menu items.
*
* @since 2.6.0
* @return array
*/
function wc_get_account_menu_items() {
return apply_filters( 'woocommerce_account_menu_items', array(
'dashboard' => __( 'Dashboard', 'woocommerce' ),
'orders' => __( 'Orders', 'woocommerce' ),
'downloads' => __( 'Downloads', 'woocommerce' ),
'edit-address' => __( 'Addresses', 'woocommerce' ),
'payment-methods' => __( 'Payment Methods', 'woocommerce' ),
'edit-account' => __( 'Account Details', 'woocommerce' ),
'customer-logout' => __( 'Logout', 'woocommerce' ),
) );
}
Nous pourrions tout à fait modifier à la source mais je rappelle que de cette manière, il faudrait alors penser à refaire la modification lors de chaque update du plugin WooCommerce, pas super pratique. Nous allons nous servir de notre fichier functions.php et y utiliser un filtre WordPress.
Pour les moins avertis, les filtres WordPress (filters) permettent de modifier le comportement d’une fonction, c’est la solution de référence pour notre problème du jour. On utilise aussi parfois les actions dans WordPress qui permettent quant à elles d’exécuter du code à des endroits spécifiques.
Je vous invite à essayer le morceau de code ci-dessous, c’est à vous !
/**
* Mon compte custom menu items.
*
* @since 2.6.0
* @return array
*/
function wpb_woo_mon_compte_order() {
$myorder = array(
'dashboard' => __( 'Mon compte', 'woocommerce' ),
'orders' => __( 'Mes commandes', 'woocommerce' ),
'edit-address' => __( 'Mes adresses', 'woocommerce' ),
'payment-methods' => __( 'Mes moyens de paiement', 'woocommerce' ),
'customer-logout' => __( 'Logout', 'woocommerce' ),
);
return $myorder;
}
add_filter ( 'woocommerce_account_menu_items', 'wpb_woo_mon_compte_order' );

Conversation
8 commentaires
Une question, un retour d’expérience ou une nuance utile ? Ajoute ton point de vue.
Bonjour,
Merci pour ce tuto. Je l’ai appliqué dans mon ficher functions.php de mon thème enfant, mais cela ne fonctionne pas. J’ai peut être mis ce code au mauvais endroit ? Pouvez-vous m’aider ? Merci 🙂
Bonjour,
L’endroit me semble le bon. Le thème Child est bien activé dans le BO ?
Quel thème utilisez-vous ?
Merci pour votre réponse. Oui, le thème est bien activé dans WordPress et il fonctionne. J’utilise le thème Divi, j’ai créé mes deux fichiers (functions.php et style.css) que j’ai importé directement dans le FTP.
Mmmmh.
Pouvez vous vérifier dans le BO les noms des endpoints ? (Woocommerce > Réglages > Avancé > Account endpoints)
En principe ils sont en Anglais et doivent concorder avec ce que l’on inscrit dans la fonction.
Si le soucis ne venait pas du point cité ci-dessus, je vous invite à essayer le code suivant, nous allons essayé de modifier le texte downloads :
add_filter ( 'woocommerce_account_menu_items', 'bantunes_rename_downloads' );
function bantunes_rename_downloads( $menu_links ){
$menu_links['downloads'] = 'Mes telechargements';
return $menu_links;
}
Autrement si ça ne fonctionne pas, c’est un soucis d’installation qui ferait que la fonction n’est pas prise en compte. N’hésitez pas à me montrer vos fichiers style.css et functions.php
Merci, les endpoints sont bien paramétrés.
Concernant le code, j’ai désactivé les téléchargements donc cette ligne là ne s’affiche pas sur mon dashboard.
Voici ce que contient mon fichier functions.php :
__( 'Mon compte', 'woocommerce' ),'orders' => __( 'Mes commandes', 'woocommerce' ),
'edit-address' => __( 'Mes adresses', 'woocommerce' ),
'payment-methods' => __( 'Mes moyens de paiement', 'woocommerce' ),
'customer-logout' => __( 'Logout', 'woocommerce' ),
);
return $myorder;
}
add_filter ( 'woocommerce_account_menu_items', 'wpb_woo_mon_compte_order' );
Et mon fichier style.css :
/*!Theme Name: Divi Child
Template: Divi
Theme URI: https://www.*********.****/
Version: 4.8.2
Description: Smart. Flexible. Beautiful.
Author: Mathilde Hoffmann
Author URI: https://www.**********.****/
Tags: responsive-layout, one-column, two-columns, three-columns, four-columns, left-sidebar, right-sidebar, custom-background, custom-colors, featured-images, full-width-template, post-formats, rtl-language-support, theme-options, threaded-comments, translation-ready
*/
Avant d’installer le Divi Child Theme, j’avais inséré le code grâce à l’extension Code Snippets. Ca ne fonctionnait pas non plus donc je pensais que c’était dû au fait qu’il fallait créer un thème enfant.
C’est un mauvais copier coller sur le début du functions ? Je ne vois pas function wpb_woo_mon_compte_order() { etc….
Oui effectivement, j’ai mal copié :
/*** Mon compte custom menu items.
*
* @since 2.6.0
* @return array
*/
function wpb_woo_mon_compte_order() {
$myorder = array(
'dashboard' => __( 'Mon compte', 'woocommerce' ),
'orders' => __( 'Mes commandes', 'woocommerce' ),
'edit-address' => __( 'Mes adresses', 'woocommerce' ),
'payment-methods' => __( 'Mes moyens de paiement', 'woocommerce' ),
'customer-logout' => __( 'Logout', 'woocommerce' ),
);
return $myorder;
}
add_filter ( 'woocommerce_account_menu_items', 'wpb_woo_mon_compte_order' );
add_filter ( 'woocommerce_account_menu_items', 'bantunes_rename_downloads' );
function bantunes_rename_downloads( $menu_links ){
$menu_links['downloads'] = 'Mes telechargements';
return $menu_links;
}
Bonjour,
J’ai suivi votre tuto, j’ai intégré votre code dans le fichier functions.php de mon thème enfant, mais il n’y a aucun changement.
J’utilise le template ekomart.
Pouvez-vous m’éclaircir merci