wp abilities list : cette commande, disponible depuis l’arrivée de l’Abilities API dans WordPress 6.9, affiche la liste des capacités qu’une extension expose aux agents et clients MCP. Elle ne dit en revanche rien sur l’usage réel de ces capacités une fois le site en production, ce qui est pourtant l’information la plus utile quand vient le moment de faire le ménage dans une extension maison qui en accumule une douzaine.
Ce tutoriel construit, pas à pas, un indicateur simple : un compteur d’appels par ability, associé à une date de dernier usage, exposé dans un écran d’administration dédié. L’objectif n’est pas de modifier la déclaration des abilities elles-mêmes, mais d’observer, de l’extérieur, ce qui sert réellement une fois exposé à un agent.
Étape 1 : identifier le point d’exécution commun
Toute ability enregistrée via wp_register_ability() passe, au moment de son exécution, par un callback unique défini lors de son enregistrement. C’est ce callback qu’il faut envelopper, sans le réécrire, pour y ajouter un comptage transparent.
function agence_envelopper_ability_avec_compteur( string $nom, callable $callback_original ) : callable {
return function ( $input ) use ( $nom, $callback_original ) {
agence_incrementer_compteur_ability( $nom );
return call_user_func( $callback_original, $input );
};
}
Étape 2 : stocker un compteur par ability
Plutôt qu’une table SQL dédiée, une simple option WordPress sérialisée suffit pour un volume raisonnable d’abilities, avec un nom et une date de dernier appel :
function agence_incrementer_compteur_ability( string $nom ) {
$stats = get_option( 'agence_stats_abilities', array() );
if ( ! isset( $stats[ $nom ] ) ) {
$stats[ $nom ] = array( 'appels' => 0, 'dernier_appel' => null );
}
$stats[ $nom ]['appels']++;
$stats[ $nom ]['dernier_appel'] = current_time( 'mysql' );
update_option( 'agence_stats_abilities', $stats, false );
}
Le troisième argument à false évite d’ajouter cette option à l’autoload, un détail qui compte dès que le nombre d’abilities suivies grandit, pour ne pas alourdir chaque chargement de page d’administration.
Étape 3 : envelopper l’enregistrement, pas la déclaration

Pour éviter de modifier chaque appel à wp_register_ability() disséminé dans le code de l’extension, un filtre appliqué sur les arguments d’enregistrement permet d’intercepter tous les callbacks au même endroit :
add_filter( 'wp_register_ability_args', function ( array $args, string $nom ) {
if ( isset( $args['execute_callback'] ) ) {
$args['execute_callback'] = agence_envelopper_ability_avec_compteur( $nom, $args['execute_callback'] );
}
return $args;
}, 10, 2 );
Étape 4 : construire l’écran d’administration
Un écran simple, ajouté via add_submenu_page, liste chaque ability enregistrée sur le site, croisée avec les statistiques collectées : nombre d’appels total, date du dernier appel, et un badge visuel pour les abilities à zéro appel après une période de référence de trente jours.
- Vert : ability appelée au moins une fois dans les sept derniers jours.
- Orange : ability appelée, mais pas depuis plus de trente jours.
- Rouge : ability jamais appelée depuis son activation, candidate à la suppression.
Distinguer inutile et rarement utile
La date de dernier appel évite un piège classique : une ability à zéro appel depuis sa création n’a pas le même statut qu’une ability appelée une fois par trimestre pour un usage saisonnier légitime, comme la génération d’un rapport annuel. Sans cette distinction, une équipe presse trop vite le bouton suppression et casse un flux qu’un agent sollicite rarement mais réellement.
Étape 5 : exporter avant de décider
Avant toute suppression d’ability, un export CSV des statistiques, généré via une simple boucle fputcsv sur les données de l’option, permet de partager la liste avec l’équipe produit et de documenter la décision de retrait dans le changelog de l’extension.
Ne jamais supprimer une ability sur la seule foi d’un compteur à zéro observé pendant une semaine : un mois complet de recul, incluant un cycle de facturation ou de reporting si le site en a un, évite bien des regrets.
En résumé
L’Abilities API expose des capacités, mais ne dit rien de leur usage réel. Un compteur d’appels léger, branché sur le filtre wp_register_ability_args, suffit à transformer une liste théorique de fonctionnalités exposées en un vrai tableau de bord d’usage, indispensable avant tout nettoyage d’une extension qui accumule des abilities au fil des versions.