1. Contexte / besoin
La section « Mon Compte » par défaut de WooCommerce contient des liens automatiques vers :
- Le tableau de bord (page d’accueil de la section)
- L’historique des commandes
- Les téléchargements (si le site commercialise des produits virtuels)
- Les différentes adresses sauvegardées
- Les détails
- Et un lien de déconnexion
A ces éléments par défauts viennent s’ajouter les éventuels liens des plugins, par exemple en cas d’utilisation d’un système de réservation (de salles).
Problématique : Comment ajouter / supprimer une entrée ou organiser le menu différemment de ce que propose WooCommerce par défaut.
2. Solution proposée
Que ce soit pour ajouter ou supprimer une entrée du menu ou pour le réorganiser, il faut faire appel au filtre woocommerce_account_menu_items.
Par défaut, il récupère le tableau des éléments du menu prêts à être affichés.
Dans l’exemple ci-dessous, la page de gestion des tâches est ajoutée juste au-dessus du lien de déconnexion et le lien pour accéder à la page des téléchargements n’est pas conservé.
add_filter( 'woocommerce_account_menu_items', 'AMA_lien_page_taches', 10, 1 );
function AMA_lien_page_taches( $items ) {
$items2 = array();
foreach ($items as $key => $value) {
if($key != 'downloads') {
if($key == 'customer-logout') $items2['gestion-des-taches'] = __( 'Gestion des tâches' );
$items2[$key] = $value;
}
}
return $items2;
}
Une fois le lien ajouté, il faut ensuite créer la page grâce au hook init et à la fonction native add_rewrite_endpoint.
L’utilisation des « endpoints » de WordPress permet de mettre en place facilement des règles de réécriture d’URL et d’y associer les contenus souhaités.
Le premier paramètre est le nom de la page, et le second explicite le(s) endroits où elle sera ajoutée, voir la documentation à ce sujet.
add_action( 'init', 'AMA_endpoint_page_taches' );
function AMA_endpoint_page_taches() {
add_rewrite_endpoint( 'gestion-des-taches', EP_ROOT | EP_PAGES );
}
La création de la page permet ensuite d’utiliser le hook woocommerce_account_nom-page_endpoint (dans notre cas woocommerce_account_gestion-des-taches_endpoint donc 🙂 ).
Dernier point, après avoir mis en place tout ça il ne faudra pas oublier de regénérer le htaccess (Réglages / Permaliens) sous peine de se retrouver face à de jolies pages 404…