# Comprendre le fonctionnement des hooks PrestaShop

> Les hooks sont le mécanisme central qui permet à un module d’ajouter du comportement à PrestaShop sans toucher au code du cœur. Comprendre leur fonctionnement change la façon d’évaluer si un besoin est réalisable simplement, ou s’il demande une intervention plus lourde.

- Source canonique : [https://allaux.fr/guides/comprendre-hooks-prestashop](https://allaux.fr/guides/comprendre-hooks-prestashop)
- Langue : FR
- Dernière mise à jour : 2026-07-26

## Réponse directe

> Un hook est un point nommé dans le code de PrestaShop où le cœur appelle tous les modules qui s’y sont inscrits, au moment précis où ce point est atteint pendant l’affichage d’une page ou le traitement d’une commande. Un module s’inscrit via registerHook() et réagit via une méthode nommée hookNomDuHook().

## Le principe en pratique

PrestaShop exécute son code normalement, et à certains endroits précis du flux, il appelle tous les modules enregistrés sur le hook correspondant, en leur laissant l’occasion d’ajouter du contenu ou d’exécuter une action. Un hook d’affichage comme displayHeader permet par exemple à un module d’insérer du CSS ou du JavaScript dans l’en-tête de chaque page. Un hook d’action comme actionValidateOrder se déclenche juste après la validation d’une commande, ce qui permet à un module d’envoyer une notification, de synchroniser un stock externe ou de déclencher un webhook.

Chaque hook correspond à un moment précis et à un type de contenu ou d’action attendu : certains sont faits pour afficher du HTML à un endroit du gabarit, d’autres pour exécuter une action sans rien afficher. Utiliser un hook prévu pour de l’affichage afin d’y exécuter une action lourde, ou l’inverse, est une source fréquente de bugs.

La liste des hooks disponibles évolue selon la version de PrestaShop : certains hooks existants sur une ancienne version disparaissent ou changent de nom lors d’une montée de version majeure, ce qui explique qu’un module ancien puisse cesser de fonctionner après une mise à jour.

## Identifier le bon hook pour un besoin donné

1. **Décrire précisément le moment souhaité** — Avant tout est-ce au chargement d’une page, après validation d’une commande, à l’ajout d’un produit au panier : préciser le déclencheur exact oriente directement vers la famille de hooks concernée.
2. **Distinguer affichage et action** — Un besoin d’affichage (ajouter un bloc, un message, un widget) et un besoin d’action (envoyer un e-mail, appeler une API externe, modifier une donnée) ne mobilisent pas le même type de hook.
3. **Consulter la documentation officielle du hook ciblé** — Chaque hook attend et fournit des paramètres différents (par exemple l’objet commande pour un hook lié à la commande), qu’il faut connaître avant d’écrire le code du module.
4. **Tester le déclenchement réel** — Un hook théoriquement adapté peut se déclencher à un moment légèrement différent de ce qui était attendu ; une vérification concrète (par exemple via un journal ou le mode debug) confirme le comportement réel avant de construire toute la logique autour.

## modules/mon-module/mon-module.php (extrait)

```
public function install()
{
    return parent::install()
        && $this->registerHook('displayHeader')
        && $this->registerHook('actionValidateOrder');
}

public function hookDisplayHeader($params)
{
    return $this->context->smarty->fetch('module:mon-module/views/templates/hook/header.tpl');
}
```

## L’ordre d’exécution se règle dans le back-office

> Quand plusieurs modules sont inscrits sur le même hook, l’écran de gestion des hooks permet de réordonner leur priorité d’exécution par glisser-déposer, ce qui compte quand deux modules affichent du contenu au même endroit ou dépendent l’un de l’autre. Cet écran se trouve dans Apparence > Positions depuis PrestaShop 1.7 (Modules et Services > Positions en 1.6).

## Les signes d’un problème lié aux hooks

- Un bloc ajouté par un module qui apparaît en double ou au mauvais endroit sur une page
- Une action censée se déclencher après validation de commande qui ne se produit jamais
- Un module qui fonctionnait bien avant une mise à jour de PrestaShop et qui a cessé de s’afficher
- Deux modules qui semblent entrer en conflit sur le même emplacement d’affichage

## FAQ

### Un même hook peut-il être utilisé par plusieurs modules à la fois ?

Oui, c’est même le fonctionnement normal : tous les modules inscrits sur un même hook sont appelés les uns après les autres, dans un ordre qui dépend de leur position configurée.

### Que se passe-t-il si aucun hook ne correspond au besoin ?

Dans ce cas, la seule alternative native reste l’override, qui remplace directement une classe du cœur plutôt que de s’y accrocher à un point prévu, avec les conséquences que cela implique sur les mises à jour.

### Comment savoir sur quels hooks un module est déjà inscrit ?

Le back-office liste, dans Apparence > Positions (Modules et Services > Positions en 1.6), l’ensemble des modules inscrits sur chaque hook, ce qui permet aussi de réordonner leur priorité d’exécution. Il n’y a aucune gestion de hooks sous Paramètres avancés.
