# Le cycle des hooks qui enregistrent une ability au chargement de WordPress

> Comprendre à quel moment du chargement de WordPress une ability doit être enregistrée, pour déboguer une ability introuvable au moment où un agent la cherche.

- Auteur : Clément Hadrot
- Publié le : 2025-07-14
- Mis à jour le : 2025-07-14
- Catégorie : IA &amp; MCP
- URL : https://wpmoderne.dev.wordpress-developpement.fr/ia-mcp/cycle-hooks-enregistrement-ability-wordpress/

## L’essentiel

- Une ability enregistrée trop tôt ou trop tard reste invisible pour l'agent
- Le hook d'enregistrement suit une logique proche de celle des types de contenu personnalisés
- Un enregistrement manquant se diagnostique en listant les abilities actives

`Ability "wpm/publier-brouillon" introuvable`. Ce message, retourné par un agent qui tentait pourtant d'appeler une fonctionnalité correctement codée, provenait d'un problème classique : l'enregistrement de l'ability avait lieu trop tôt dans le cycle de chargement de WordPress, avant que le mécanisme correspondant ne soit prêt à l'accueillir.

L'Abilities API, en cours de développement pour WordPress au moment où nous testons cette version bêta, reprend une logique de cycle de chargement proche de celle des types de contenu personnalisés ou des taxonomies : un hook précis existe pour l'enregistrement, et l'appeler au mauvais moment produit une ability silencieusement absente plutôt qu'une erreur explicite.

## Le hook d'enregistrement et son ordre d'exécution

Sur les versions de test que nous avons manipulées, l'enregistrement d'une ability passe par une fonction d'enregistrement dédiée, appelée depuis un hook spécifique à l'Abilities API qui se déclenche après l'initialisation du cœur de WordPress mais avant le rendu de l'interface d'administration — une position comparable à celle du hook `init` utilisé traditionnellement pour enregistrer un type de contenu personnalisé. Le nom exact de ce hook restant encore susceptible d'évoluer tant que l'API n'est pas stabilisée dans une version officielle, mieux vaut se référer à la documentation à jour plutôt qu'à un nom figé dans un article.

```
// Principe general, a adapter au nom de hook documente pour la version testee
add_action( 'hook_dedie_abilities_api', function () {
    // Fonction d'enregistrement fournie par l'Abilities API,
    // avec un identifiant, un libelle, une description et un callback
    wpm_enregistrer_une_ability( 'wpm/publier-brouillon', array(
        'label'       => 'Publier un article en brouillon',
        'description' => 'Cree un article WordPress avec le statut brouillon.',
        'callback'    => 'wpm_publier_brouillon',
    ) );
} );
```

Un enregistrement effectué directement au chargement du fichier du plugin, en dehors de ce hook, s'exécute avant que le registre interne des abilities ne soit initialisé, ce qui produit une ability silencieusement ignorée sans message d'erreur visible dans les journaux courants.

## Ce que révèle un enregistrement trop tardif

> L'essentiel à retenir : Une ability enregistrée trop tôt ou trop tard reste invisible pour l'agent ; Le hook d'enregistrement suit une logique proche de celle des types de contenu personnalisés ; Un enregistrement manquant se diagnostique en listant les abilities actives

À l'inverse, un enregistrement placé sur un hook déclenché trop tard — après que le client MCP ou l'agent a déjà interrogé la liste des abilities disponibles — produit le même symptôme : l'ability existe dans le code, mais n'apparaît pas dans la liste consultée par l'agent au moment de sa décision.

- Un enregistrement trop précoce s'exécute avant l'initialisation du registre interne
- Un enregistrement trop tardif arrive après la consultation de la liste par l'agent
- Aucun des deux cas ne produit d'erreur explicite dans les journaux par défaut
- Le symptôme observé côté agent est identique dans les deux cas : ability introuvable

## Diagnostiquer une ability absente

La méthode de diagnostic la plus directe consiste à lister les abilities effectivement enregistrées à un instant donné, plutôt que de relire le code en espérant repérer l'erreur à l'œil. Une fonction d'introspection fournie par l'API permet de comparer ce qui est attendu et ce qui est réellement présent dans le registre, via une commande WP-CLI ou un test direct en PHP.

```
wp eval 'foreach ( wpm_lister_les_abilities_enregistrees() as $nom_ability ) {
    echo $nom_ability . PHP_EOL;
}'
```

Sur un cas que nous avons rencontré, cette commande a immédiatement montré l'absence de l'ability attendue, confirmant que le problème venait de l'ordre d'exécution plutôt que d'une erreur de syntaxe dans la définition elle-même.

## Une logique déjà familière

Ce cycle en deux temps — un hook d'initialisation précis, puis une consultation par un consommateur externe — reproduit une logique déjà présente dans WordPress pour l'enregistrement des types de contenu personnalisés sur `init` ou des blocs sur `init` également. Un développeur habitué à ce schéma retrouve rapidement ses repères avec l'Abilities API, à condition de vérifier le nom exact du hook attendu, qui reste propre à cette API en cours de stabilisation.

> Sur nos tests, la première réaction face à une ability introuvable est de vérifier le hook d'enregistrement avant de soupçonner un problème côté agent ou côté serveur MCP.

## Ce qui peut encore évoluer

Cette API étant encore en développement au moment où nous rédigeons cet article, le nom exact du hook et la structure de l'enregistrement peuvent évoluer avant la sortie stable de la version de WordPress qui l'intégrera officiellement. Il convient de vérifier la documentation à jour avant de figer un enregistrement en production.

## En résumé

Une ability absente au moment où un agent la cherche provient presque toujours d'un problème de timing dans le cycle de chargement, pas d'une erreur de syntaxe. Vérifier le hook d'enregistrement et lister les abilities réellement actives reste le réflexe de diagnostic le plus rapide.
