Ajouter des customs endpoints à WooCommerce

Créer un custom endpoint ou une page privée sur l'interface client WooCommerce
WooCommerce Lecture 7 minutes • 17 février 2017

Il y a peu, un client m'a demandé de personnaliser son site WooCommerce. Le but étant de proposer dans l'interface client (My Account), un lien supplémentaire (custom endpoint) permettant d'accéder à une page "Fiches Techniques". Dans cette page devaient figurer des fichiers PDF téléchargeables. Cette page devait uniquement être accessible depuis le compte client, par les clients identifiés.
WooCommerce propose d'origine un certains nombre d'endpoints, se limitant aux possibilités suivantes (qu'est-ce que les endpoints WooCommerce ?) :
Endpoints originaux de WooCommerce
Dans notre exemple, nous allons ajouter un 9ème endpoint qui sera donc nommé Fiches techniques. Vous êtes libre de le nommer selon votre besoin spécifique.

Etape 1 : créez votre page comme n'importe qu'elle page WordPress

Ajoutez ce que vous voulez dans cette page et la nommer comme vous le souhaitez. Dans notre exemple, la page s'appelle "fiches techniques". Vous pouvez publier la page ou bien l'enregistrer comme brouillon. L'important est de récupérer l'ID de la page. Pour ce faire, allez dans "Toutes les pages" et survolez le titre de la page que vous venez de créer. Vous verrez apparaître en bas à gauche de votre écran une ligne semblable à celle-ci : post.php?post=21&action=edit
Dans mon cas, l'ID de la page est donc 21.
 

Etape 2 : ouvrez votre fichier functions.php

Copier et coller les fonctions suivantes à la suite dans votre fichier functions.php, et sauvegarder les changements.
L'explication du code vient juste après.

// Etape 1 - créez une page et récupérez son ID
// Etape 2 - collez l'ensemble de ces fonctions dans votre fichier functions.php
// Dans cet exemple, fiches techniques est la page ainsi que le custom endpoint
// Ce code va générer un nouveau endpoint nommé fiches techniques dans l'interface du compte client

function custom_wc_end_point() {
if(class_exists('WooCommerce')){
add_rewrite_endpoint( 'fiches-techniques', EP_ROOT | EP_PAGES );
}
}
add_action( 'init', 'custom_wc_end_point' );

function custom_endpoint_query_vars( $vars ) {
$vars[] = 'fiches-techniques';
return $vars;
}
add_filter( 'query_vars', 'custom_endpoint_query_vars', 0 );
function ac_custom_flush_rewrite_rules() {
flush_rewrite_rules();
}
add_action( 'after_switch_theme', 'ac_custom_flush_rewrite_rules' );

// ajoute le custom endpoint comme un nouvel item au menu du compte client
function custom_endpoint_acct_menu_item( $items ) {
$logout = $items['customer-logout'];
unset( $items['customer-logout'] );
$items['fiches-techniques'] = __( 'Fiches Techniques', 'woocommerce' ); // remplacer "fiches techniques" par votre custom endpoint
$items['customer-logout'] = $logout;
return $items;
}
add_filter( 'woocommerce_account_menu_items', 'custom_endpoint_acct_menu_item' );

// récupère le contenu de votre page (dans notre cas la page fiches techniques dont l'ID est 21)
function fetch_content_custom_endpoint() {
global $post;
$id = "21"; // l'ID de votre page. Pour moi c'est 21 comme expliqué plus haut.
ob_start();
$output = apply_filters('the_content', get_post_field('post_content', $id));
$output .= ob_get_contents();
ob_end_clean();
echo $output;
}
add_action( 'woocommerce_account_fichestechniques_endpoint', 'fetch_content_custom_endpoint' );

Explication du code

Dans l'étape 1, nous avons créé une page et récupéré son identifiant. Dans mon cas, l'identifiant de ma page "Fiches techniques" est 21.
Dans l'étape 2, nous avons ajouté des fonctions. C'est le moment de les regarder une à une et de comprendre comment elles fonctionnent.

Comprendre la 1ère fonction : custom_wc_end_point()

// La 1ère fonction enregistre un nouveau endpoint

function custom_wc_end_point() {
if(class_exists('WooCommerce')){
add_rewrite_endpoint( 'fiches-techniques', EP_ROOT | EP_PAGES );
}
}
add_action( 'init', 'custom_wc_end_point' );

Cette première fonction enregistre un nouveau custom endpoint pour WooCommerce.
 

Comprendre la 2nde fonction : custom_endpoint_query_vars()

// La 2nde fonction nomme notre nouveau endpoint
function custom_endpoint_query_vars( $vars ) {
$vars[] = 'fiches-techniques';
return $vars;
}
add_filter( 'query_vars', 'custom_endpoint_query_vars', 0 );

Dans la 2nde fonction, nous attribuons un nom à notre custom endpoint (une variable pour être plus précis). Dans cet exemple, le nom est fiches-techniques. Il ne s'agit pas du nom qui figurera dans le lien de menu du compte utilisateur. Il doit être impérativement écrit en minuscule.
 

Comprendre la 3ème fonction : ac_custom_flush_rewrites_rules()

// Rafraichît les permaliens
function ac_custom_flush_rewrite_rules() {
flush_rewrite_rules();
}
add_action( 'after_switch_theme', 'ac_custom_flush_rewrite_rules' );

La 3ème fonction garantie le bon rafraichissement des permaliens lorsque vous changez de thème. Il est d'ailleurs recommandé de re-sauvegardé vos permaliens (Réglages > Permaliens) après avoir ajouté l'ensemble de nos fonctions.
 

Comprendre la 4ème fonction : ac_custom_flush_rewrites_rules()

function custom_endpoint_acct_menu_item( $items ) {
$logout = $items['customer-logout'];
unset( $items['customer-logout'] );
$items['fiches-techniques'] = __( 'Fiches Techniques', 'woocommerce' ); // remplacer "fiches techniques" par votre custom endpoint
$items['customer-logout'] = $logout;
return $items;
}
add_filter( 'woocommerce_account_menu_items', 'custom_endpoint_acct_menu_item' );

La 4ème fonction ajoute un nouvel item nommé "Fiches Techniques" au menu de l'interface du compte client WooCommerce. Le nom peut ici être en majuscule ou en minuscule. La fonction précise que notre item sera ajouté avant l'item de Déconnexion.

Comprendre la 5ème (et dernière) fonction : fetch_content_custom_endpoint()

// récupère le contenu de votre page (dans notre cas la page fiches techniques dont l'ID est 21)
function fetch_content_custom_endpoint() {
global $post;
$id = "21"; // l'ID de votre page. Pour moi c'est 21 comme expliqué plus haut.
ob_start();
$output = apply_filters('the_content', get_post_field('post_content', $id));
$output .= ob_get_contents();
ob_end_clean();
echo $output;
}
add_action( 'woocommerce_account_fichestechniques_endpoint', 'fetch_content_custom_endpoint' );

La 5ème fonction associe le nouvel item au contenu de la page ayant l'ID 21, donc "Fiches Techniques". Ainsi lorsque vous cliquerez sur le nouvel item "Fiches techniques" c'est bien le contenu de votre page qui s'affichera. Sans cette fonction, votre lien dirigera vers une erreur 404.
 
Voilà, vous savez maintenant comment ajouter votre propre lien de menu à l'interface du compte client WooCommerce. Seuls les clients pourront le voir.
Pour garantir un accès à vos nouvelles pages uniquement aux clients connectés, et pour rediriger les autres vers une page spécifique - Tutoriel : protéger l'accès à vos pages WordPress et WooCommerce
Cet article vous a plus ? Dîtes-le en commentaire et rejoignez-nous sur Facebook pour partager d'autres astuces et tutoriels gratuits !


Avis clients

Tibow Webdesign

Tous les avis

Loïc Perrière 6 janvier 2021

Ingénieur de recherches - CNRS / Recommandation LinkedIn
Lors du démarrage de projet de refonte du site web de mon laboratoire, j’ai contacté Thibaut pour obtenir des renseignements sur un travail qu’il avait déjà réalisé auprès d’un autre client.
Sa franchise et la clarté de ses réponses m’ont finalement convaincu de lui confier la conception de deux sites internet. Nos échanges ont toujours été constructifs, et Thibaut a fait preuve, tout au long du développement, de dynamisme et de réactivité, et a également réalisé de nombreuses propositions qui ont majoritairement été retenues. Enfin, il a su faire preuve d’écoute pour intégrer les problématiques et les demandes spécifiques d’un site internet de laboratoire public pour créer un site à notre image.
La collaboration a été fructueuse et constructive, et ça a été un réel plaisir de travailler avec lui.

Clara Deleuze 21 décembre 2020

Principal Chief Executive Officer chez On Divorce / Recommandation LinkedIn
Je collabore avec Thibault depuis plus de 10 ans.
Plus qu'un dev Full Stack c'est un profil au sens logique qui sera vous accompagner plus globalement sur votre projet IT.
Je lui ai confié plus de 5 projets et vous le recommande vivement : réactivité, sens du détail, proactivité...Il sait s'adapter "au métier" pour lequel il intervient et pas uniquement à la fonctionnalité !

Ackeret Mano 22 février 2019

Google Avis
Nous avons fait appel à Thibaut pour développer le site internet de notre entreprise Ackeret Mano, l'année dernière et nous avons été très satisfaits.

C'est un garçon à l'écoute, disponible et sérieux.
Nous vous le recommandons les yeux fermés.

Frédéric Meyrou 19 octobre 2018

Google Avis
Thibaut a repris en main le site du projet de coopérative supercoop.fr et il a parfaitement compris le style et l'énergie qu'il fallait donner au projet donc le site est un vecteur important de communication. Vous pouvez lui faire confiance!

Patrick Chatenet 24 juin 2018

Google Avis
Nous avons travaillé avec Thibaut Soufflet pour finaliser un site Wordpress fait par une autre personne qui était partie vers d'autres horizons professionnels. Il s'est parfaitement adapté, nous a bien écouté et a proposé de très bonnes solutions en termes d'ergonomie et de facilité d'utilisation pour nos clients. A eu à régler des problèmes techniques et a pris le temps de nous trouver les meilleures solutions. Je le conseille vivement!

Anaelle Sorignet 21 mai 2018

Google Avis
Tibow est super efficace, réactif et à l'écoute ! Il nous a concocté un super site. Je recommande vivement de faire appel à lui.

ISOPROM 15 avril 2018

Google Avis
donne de tres bons conseils

Alexis Supiot 5 septembre 2017

Google Avis
Plusieurs projets avec Thibaut et à chaque fois de bons échanges, une facilité dans la compréhension de nos attentes et pour l'ensemble des résultats très satisfaisants sur le rendu. Je recommande vivement et sais que nous aurons d'autres projets ensemble.

Jenny Debaere 1 septembre 2017

Google Avis
Je tiens à mettre en avant les très bonnes compétences techniques de Thibaut, qui a réalisé un travail correspondant totalement à mes attentes.
C'est une personne très attentive et à l'écoute qui saura comprendre votre univers et transposer cela à vos projets. Un autre point fort est sans nul doute sa réactivité et son professionnalisme quant au respect des jalons demandés. Je le recommande très fortement pour vos projets de site. Je n'hésiterai pas à collaborer de nouveau avec lui.

Pierre Arbeille 20 juillet 2016

Google Avis
Thibaut a réalisé le design de mon site, et j'en suis très satisfait. Le design correspondait exactement avec ce que j'avais en tête (mais sans les talents pour le réaliser). Et le délai a été tenu, merci encore !