SOMMAIRE

Un hook PrestaShop, c’est une prise de courant que PrestaShop installe à des endroits précis de ta boutique : dans le code, avant et après chaque événement important. Un module vient s’y brancher pour afficher un bloc ou déclencher une action, sans toucher au cœur de PrestaShop. Quand tu comprends les hooks, tu comprends comment fonctionne presque tout module.
Je les manipule tous les jours dans mes développements sur PrestaShop, et je vois surtout deux situations : le propriétaire de boutique qui se demande pourquoi son module n’apparaît pas, et le développeur débutant qui ne sait pas quel hook choisir. Ce guide s’adresse aux deux. Au programme : ce que c’est, les deux familles, où les repérer dans ton back-office, les plus utiles, un exemple de code et quoi faire quand ça ne marche pas.
- Définition : un hook est un point d’accroche où un module peut afficher du contenu ou exécuter du code.
- Deux familles : les hooks d’affichage (display) montrent quelque chose, les hooks d’action (action) réagissent à un événement.
- Où les voir : dans le back-office, menu Design puis Positions.
- Créer un hook : possible, mais souvent inutile, un hook existant suffit dans la plupart des cas.
- Module invisible : vérifie le hook, le cache, la position et les conflits avant de suspecter le thème.
C’est quoi un hook PrestaShop ?
PrestaShop prévoit, à des dizaines d’endroits de son code, un appel du type « si quelqu’un veut intervenir ici, qu’il le fasse maintenant ». Chaque endroit porte un nom de hook. Un module s’inscrit auprès de ce nom, et PrestaShop l’appelle quand le moment arrive.
L’intérêt est simple : tu ajoutes une fonctionnalité sans modifier un seul fichier du cœur de PrestaShop. Le jour où tu mets à jour ta boutique, ton module reste en place. C’est la différence entre un travail propre et une rustine qui saute à la prochaine mise à jour.
Les deux familles de hooks : display et action
Les hooks d’affichage (display)
Leur nom commence par display. Ils servent à afficher du contenu dans une zone de la page : l’en-tête, le pied de page, la fiche produit, le panier. Un module « bandeau de livraison offerte » ou « produits similaires » s’accroche à un hook d’affichage. C’est ce que tu vois à l’écran, et ce que tu peux déplacer depuis le back-office.
Les hooks d’action (action)
Leur nom commence par action. Ils ne montrent rien : ils préviennent qu’un événement vient d’avoir lieu (commande validée, client inscrit, produit enregistré) et laissent un module réagir. C’est là que se branchent les connexions à un ERP ou les mises à jour de stock. Comme ils n’ont pas de position visible, on ne les retrouve pas dans les mêmes écrans du back-office.
Où voir les hooks de ta boutique
Dans le back-office, va dans Design puis Positions. Tu y vois la liste des hooks d’affichage, et sous chacun les modules qui y sont accrochés, dans l’ordre où ils s’affichent. C’est l’écran que j’ouvre en premier quand un client me dit « mon module ne s’affiche pas ».
Tu peux y faire trois choses utiles :
- greffer un module sur un hook de plus, pour l’afficher à un second endroit ;
- déplacer un module vers le haut ou le bas d’un même hook, pour changer son ordre d’affichage ;
- retirer un module d’un hook, sans le désinstaller, pour le faire disparaître d’une zone.
Un hook n’affiche que ce que le thème a prévu. Si ton thème ne contient pas d’emplacement pour un hook donné, tu peux y accrocher tous les modules que tu veux, rien n’apparaîtra.
Les hooks que j’utilise le plus
Il existe des centaines de hooks, et tu n’en utiliseras qu’une petite dizaine régulièrement. Voici ceux que je retrouve le plus souvent dans les modules que je développe et les boutiques que je maintiens.
| Hook | Famille | Il se déclenche | Usage courant |
|---|---|---|---|
| displayHeader | Affichage | Dans l’en-tête de chaque page | Ajouter un script, un style ou une balise |
| displayHome | Affichage | Sur la page d’accueil | Bloc de contenu, sélection de produits |
| displayFooter | Affichage | Dans le pied de page | Liens, réassurance, formulaire |
| displayProductAdditionalInfo | Affichage | Sur la fiche produit, près de l’achat | Info de livraison, partage, garantie |
| displayShoppingCartFooter | Affichage | En bas de la page panier | Message, produit complémentaire |
| displayOrderConfirmation | Affichage | Sur la page de confirmation de commande | Suivi, message personnalisé |
| actionValidateOrder | Action | Quand une commande est validée | Envoyer la commande à un ERP ou un fournisseur |
| actionOrderStatusPostUpdate | Action | Après un changement de statut de commande | Déclencher un mail ou une synchronisation |
| actionCartSave | Action | Quand un panier est enregistré | Suivre les paniers, relances |
| actionCustomerAccountAdd | Action | Quand un client crée un compte | Envoi vers un outil d’emailing |
| actionProductSave | Action | Quand un produit est enregistré | Mettre à jour un flux ou un cache |
Ces noms sont ceux que je rencontre sur PrestaShop 1.7 et 8. La liste exacte dépend de ta version et de ton thème, donc vérifie toujours dans la documentation officielle avant de te lancer sur un hook précis. Pour t’aider à choisir, voici un petit outil.
🔌 Quel hook pour mon besoin ?
Comment un module s’accroche à un hook
Un module déclare ses hooks au moment de son installation, puis fournit une méthode qui porte le nom du hook précédé de hook. Voici le principe, avec un exemple minimal sur displayHeader :
public function install()
{
return parent::install()
&& $this->registerHook('displayHeader');
}
public function hookDisplayHeader(array $params)
{
// Code exécuté quand PrestaShop appelle displayHeader
return '<!-- contenu à afficher -->';
}
La méthode registerHook() inscrit le module auprès du hook, une seule fois, à l’installation. Ensuite, un hook d’affichage renvoie du contenu, alors qu’un hook d’action exécute simplement du code.
Le piège que je vois le plus : si tu ajoutes un nouveau hook à un module déjà installé, il n’est pas inscrit automatiquement. Il faut réinitialiser le module, le réinstaller, ou passer par un script de mise à jour. Beaucoup de « ça ne marche pas » viennent de là, et on cherche longtemps au mauvais endroit.
Créer son propre hook
Tu peux créer un hook à toi, par exemple pour laisser d’autres modules s’accrocher à un emplacement de ton thème. Le principe : tu poses un point d’appel dans le template ou dans le code, puis les modules s’y inscrivent comme sur n’importe quel hook.
- dans un template Smarty, tu appelles le hook avec
{hook h='displayMonHook'}; - dans le code PHP, tu le déclenches avec
Hook::exec('displayMonHook'); - un module s’inscrit ensuite avec
registerHook('displayMonHook'), et PrestaShop crée le hook s’il n’existe pas encore.
Avant d’en créer un, demande-toi s’il en existe déjà un qui convient. Dans la grande majorité des projets, un hook existant suffit, et un hook maison ajoute une dépendance à ton thème que tu devras entretenir.
Quand un hook ne fonctionne pas
Voici la checklist que je déroule dans cet ordre quand un module ne s’affiche pas ou ne réagit pas :
- le module est-il bien greffé sur le hook, dans Design puis Positions ?
- le thème appelle-t-il ce hook à l’endroit voulu ? Sinon, rien ne s’affiche ;
- le cache est-il vidé ? Après un changement de hook, vide le cache dans Paramètres avancés puis Performances ;
- le hook est-il inscrit pour ce module ? Si tu viens de l’ajouter dans le code, réinitialise le module ;
- un autre module accroché au même hook n’interfère-t-il pas ? Désactive-les un par un pour trouver le coupable ;
- le mode debug est-il activé ? Il affiche les erreurs PHP masquées, à utiliser sur une préproduction plutôt qu’en ligne.
Quand plusieurs modules partagent un hook, l’ordre d’exécution compte. Deux modules qui modifient la même donnée peuvent s’écraser l’un l’autre, et c’est une source de conflits fréquente sur les boutiques qui empilent les modules.
Hooks et PrestaShop 8, 9 : ce qui change
Les hooks classiques (display et action) restent au cœur du fonctionnement de PrestaShop sur les versions récentes, et la plupart des modules s’appuient toujours dessus. La documentation officielle décrit aussi des hooks dits « modernes », liés aux pages du back-office construites avec Symfony, qui suivent une logique un peu différente.
Le point d’attention vient surtout des modules anciens : un module écrit pour PrestaShop 1.6 peut appeler des hooks qui n’existent plus ou qui ont changé de nom. C’est l’un des sujets à vérifier lors d’une migration de PrestaShop 1.6 vers 8, module par module.
Hooks ou overrides : lequel choisir ?
Un override remplace une classe ou un contrôleur de PrestaShop par ta propre version. C’est plus puissant, et aussi plus fragile : il peut entrer en conflit avec un autre module et casser lors d’une mise à jour. Mon réflexe reste simple : un hook d’abord, un override seulement quand aucun hook ne permet d’obtenir le résultat. Je consacre un article à part aux overrides.
Un module qui ne s’affiche pas, ou un hook qui te résiste ?
Dis-moi ta version de PrestaShop, ton thème et le module concerné. Je regarde d’où vient le blocage et je te dis si c’est un simple réglage ou un vrai développement.
Me parler de mon problèmeConclusion
Quand un module se comporte mal, ouvre Design puis Positions avant d’accuser le thème : le problème vient souvent d’un hook mal greffé ou jamais inscrit. Le reste, c’est de la méthode, et la checklist plus haut te fait gagner du temps. Si tu veux aller plus loin, je détaille comment je conçois un module dans mon article sur le développement de modules PrestaShop. Tu peux aussi voir l’ensemble de mes services sur ma page freelance PrestaShop, ou regarder les modules PrestaShop que je propose, comme le module de rétractation Easy Withdrawal.
Et si tu veux voir comment je travaille sur un très gros projet PrestaShop, la migration de Motostand est ma réalisation la plus complexe.
FAQ
C’est quoi un hook dans PrestaShop ?
Un hook est un point d’accroche placé par PrestaShop à un endroit précis de son code. Un module peut s’y inscrire pour afficher du contenu ou exécuter une action, sans modifier le cœur de PrestaShop.
Quelle est la différence entre un hook display et un hook action ?
Un hook display affiche du contenu dans une zone de la page, comme le pied de page ou la fiche produit. Un hook action ne montre rien : il prévient qu’un événement a eu lieu, comme une commande validée, pour qu’un module réagisse.
Où voir la liste des hooks dans le back-office ?
Dans le menu Design puis Positions. Tu y vois les hooks d’affichage et les modules greffés sous chacun. Tu peux y greffer, déplacer ou retirer un module.
Comment créer un hook PrestaShop ?
Tu poses un point d’appel avec la balise hook de Smarty dans un template, ou avec Hook::exec dans le code PHP. Les modules s’inscrivent ensuite avec registerHook. Vérifie d’abord qu’un hook existant ne convient pas déjà.
Pourquoi mon module ne s’affiche-t-il pas sur son hook ?
Les causes fréquentes sont un module non greffé sur le hook, un thème qui n’appelle pas ce hook, un cache non vidé, un hook ajouté au code sans réinitialiser le module, ou un conflit avec un autre module accroché au même hook.
Faut-il utiliser un hook ou un override ?
Un hook d’abord, dans la grande majorité des cas. Un override modifie une classe de PrestaShop, ce qui le rend plus fragile lors des mises à jour et plus exposé aux conflits. On ne l’utilise que si aucun hook ne permet d’obtenir le résultat.
Articles liés
- Les overrides PrestaShop — Quand basculer d’un hook vers un override — et les précautions à prendre.
- L’API webservice PrestaShop — Exposer ou consommer des données PrestaShop via l’API REST native.