Le WordPress d'aujourd'hui, décodé pour les développeurs

Tips

Un indicateur quand une ability de l’Abilities API n’a jamais été appelée

Un compteur d'appels par ability, mis à jour à chaque invocation, révèle en quelques semaines les capacités qu'une extension expose pour rien.

Par Clément Hadrot • 30 décembre 2025 • 4 min de lecture • Aucun commentaire
Un indicateur quand une ability de l'Abilities API n'a jamais été appelée

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

L'essentiel à retenir : Un compteur d'appels par ability, incrémenté à l'exécution ; Un tableau de bord listant les abilities jamais sollicitées ; Une date de dernier appel pour distinguer inutile et rarement utile

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.

Partager :

À propos de l'auteur

Clément Hadrot

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi