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' );