Comment modifier le menu de navigation de la page "Mon compte" dans WooCommerce
-
-
La réponseplus détailléeici: https://github.com/woocommerce/woocommerce/wiki/Customising-account-page-tabsThe more detailed answer here: https://github.com/woocommerce/woocommerce/wiki/Customising-account-page-tabs
- 0
- 2018-05-28
- Zhi V
-
2 réponses
- votes
-
- 2017-08-16
Pour cela,vousn'avez pas besoin demodifier le
woocommerce/templates/myaccount/navigation.php
.Lameilleurefaçon depersonnaliser les éléments dumenu denavigation "Mon compte"est d'utiliser:
-
woocommerce_account_menu_items
crochet defiltrepour ajouter denouveaux éléments aumenu. -
array_slice()
pour réorganiser les comme vous le souhaitez.
De cettefaçon,en utilisant le crochet defiltrage
woocommerce_account_menu_items
,vousintégrez parfaitement vospropres éléments à WC,en effet:- Possibilité de redéfinir vosproprespoints determinaison d'article via lapage deparamètres WC "Compte".
- WCmet àjour automatiquement l'URL du lien de l'élément lorsque,parexemple,unemodificationest apportée auxparamètres/structure du lienpermanent.
Exemple de code:
// Note the low hook priority, this should give to your other plugins the time to add their own items... add_filter( 'woocommerce_account_menu_items', 'add_my_menu_items', 99, 1 ); function add_my_menu_items( $items ) { $my_items = array( // endpoint => label '2nd-item' => __( '2nd Item', 'my_plugin' ), '3rd-item' => __( '3rd Item', 'my_plugin' ), ); $my_items = array_slice( $items, 0, 1, true ) + $my_items + array_slice( $items, 1, count( $items ), true ); return $my_items; }
Remarque 1 : l'URL du lien de vos articlesest définie automatiquementpar WC ici . Pour cefaire,WC ajoute simplement lepoint determinaison de l'élément défini dans lefiltre ci-dessus à l'URL de lapage "Mon compte". Définissez donc vospoints determinaison d'articleen conséquence.
Note 2 : Dans votre question,il semble que vous ayezmodifié lemodèle WooCommerce directement dans lenoyau ...
woocommerce/templates/myaccount/navigation.php
Lorsque vous devez modifier unmodèle de WC,lamanière correcte de lefaireest de dupliquer le chemin dumodèle relatif au dossierwoocommerce/templates
dans le dossierwoocommerce
de votrethème/plugin. Parexemple,dansnotre cas,vous devrez coller lemodèle dans:
child-theme/woocommerce/myaccount/navigation.php
.For that, you do not need to modify the
woocommerce/templates/myaccount/navigation.php
.The best way to customize the "My Account" navigation menu items is to use:
woocommerce_account_menu_items
filter hook to add new items to the menu.array_slice()
to reorder them the way you want.
This way, by using
woocommerce_account_menu_items
filter hook, you integrate perfectly your own items to WC, indeed:- Possibility to redefine your own item endpoints via the WC "Account" settings page.
- WC updates automatically the item link's URL when, for example, a modification is done to the permalink settings/structure.
Code example:
// Note the low hook priority, this should give to your other plugins the time to add their own items... add_filter( 'woocommerce_account_menu_items', 'add_my_menu_items', 99, 1 ); function add_my_menu_items( $items ) { $my_items = array( // endpoint => label '2nd-item' => __( '2nd Item', 'my_plugin' ), '3rd-item' => __( '3rd Item', 'my_plugin' ), ); $my_items = array_slice( $items, 0, 1, true ) + $my_items + array_slice( $items, 1, count( $items ), true ); return $my_items; }
Note 1: The link's url of your items is defined automatically by WC here. To do that, WC simply append the item endpoint defined in the filter above to the "My account" page URL. So define your item endpoints accordingly.
Note 2: In your question, it seems like you modified the WooCommerce template directly in core...
woocommerce/templates/myaccount/navigation.php
When you have to modify a WC template, the correct way to do it is to duplicate the template's path relative to thewoocommerce/templates
folder into your theme/plugin'swoocommerce
folder. For example in our case, you'd have to paste the template into:
child-theme/woocommerce/myaccount/navigation.php
.-
Bonjour,j'essaye cetteméthode,en ajoutant le code dansfunctions.php,maisj'obtiens les liens uniquement dans lanavigation du haut,pas aussi dans lemenu latéral,une suggestion?Hello, I'm trying this method, by adding the code into functions.php, but I get the links only in the top navigation, not also in the side menu, any suggestion?
- 0
- 2020-05-21
- alexcr
-
@alexcr Labarre latéraleet l'en-tête sontgéréspar votrethème,paspar leplugin WC.WCimplémente simplement desmodèleset des hooks que les développeurs dethèmeset lesintégrateurs doiventinclure ounon.@alexcr Both the sidebar and header are handled by your theme, not by the plugin WC. WC just implements templates and hooks which are up to theme devs and integrators to include or not.
- 0
- 2020-05-25
- ClemC
-
- 2020-06-18
Lapersonnalisation du compte Woocommerceet l'ajout denouveaux articles sefonten quelques étapes,
Première étape: créer des liens:
Vous devez utiliser lefiltre
woocommerce_account_menu_items
pourmodifier les éléments demenuexistants ou ajouter denouveaux éléments demenu,parexemplej'ajoute un élément appelé Liste de souhaitsadd_filter( 'woocommerce_account_menu_items', function($items) { $items['wishlist'] = __('Wishlist', 'textdomain'); return $items; }, 99, 1 );
Remarque: J'ai utilisé laméthode laplus simple,vouspouvez utiliser array_slice si vous souhaitezplacer l'élément demenu à laposition souhaitée.
P.s: Si vous souhaitez supprimer oumodifier des élémentsexistants,vouspouvez lefaire comme ceci:
add_filter( 'woocommerce_account_menu_items', function($items) { unset($items['downloads']); // Remove downloads item $items['orders'] = __('My Orders', 'textdomain'); // Changing label for orders return $items; }, 99, 1 );
Étape 2: Ajouter despoints defin de réécriture:
Pour chaque élément que vous ajoutez,vous devrez ajouter unpoint determinaison:
add_action( 'init', function() { add_rewrite_endpoint( 'wishlist', EP_ROOT | EP_PAGES ); // Repeat above line for more items ... } );
Sachez qu'après avoir ajouté denouveauxpoints determinaison,vous devez vider les règles de réécritureen accédant à < wp-admin/settings/permalinks[/> ou avec lafonction
flush_rewrite_rules()
Étape 3: afficher lenouveau contenu de l'article
Pour afficher le contenu de vos élémentsnouvellement ajoutés,vous devez utiliser l'action
woocommerce_account_{myEndPoint}_endpoint
,pournotreexemple,j'ai créé unfichier appeléwishlist.php
dansmon répertoire dethèmes souswoocommerce/myaccount/
et affichez son contenu comme ceci:add_action( 'woocommerce_account_wishlist_endpoint', function() { wc_get_template_part('myaccount/wishlist'); });
Well customizing Woocommerce account and adding new items comes in a few steps,
First Step: Create Links:
You should use
woocommerce_account_menu_items
filter to modify existing menu items or adding new menu items, for example i add an item called Wishlistadd_filter( 'woocommerce_account_menu_items', function($items) { $items['wishlist'] = __('Wishlist', 'textdomain'); return $items; }, 99, 1 );
Note: I've gone through simplest way, you can use array_slice if you want to put menu item at your desired position.
P.s: If you want to remove or modify existing items you can do it like this:
add_filter( 'woocommerce_account_menu_items', function($items) { unset($items['downloads']); // Remove downloads item $items['orders'] = __('My Orders', 'textdomain'); // Changing label for orders return $items; }, 99, 1 );
Step 2: Add rewrite end points:
For each item you add you're gonna need to add an endpoint:
add_action( 'init', function() { add_rewrite_endpoint( 'wishlist', EP_ROOT | EP_PAGES ); // Repeat above line for more items ... } );
Note that after you add new endpoints you need to flush rewrite rules by either going to wp-admin/settings/permalinks and clicking update button or with
flush_rewrite_rules()
functionStep 3: Display new item content
To display content for your newly added items you should use
woocommerce_account_{myEndPoint}_endpoint
action, for our example i created a file calledwishlist.php
in my themes directory underwoocommerce/myaccount/
and display it's content like this:add_action( 'woocommerce_account_wishlist_endpoint', function() { wc_get_template_part('myaccount/wishlist'); });
Je souhaitemodifier lemenu denavigation degauche "Mon compte" de WooCommerce.
Pour cela,j'ai apporté desmodifications dans le
woocommerce/templates/myaccount/navigation.php
. Lesproblèmes avec cette approche sont:Quelleest lameilleurefaçon depersonnaliser lemenu denavigation "Mon compte" de WooCommerce àma convenance?