Un tableau de bord qualité, développé en interne par une agence pour suivre plusieurs sites clients, doit pouvoir interroger chaque site WordPress pour récupérer ses scores d’accessibilité les plus récents. Plutôt que d’installer un plugin de supervision tiers sur chaque site, souvent lourd et pensé pour un usage bien plus large, la route la plus directe consiste à exposer ces données via une route REST personnalisée, en s’appuyant uniquement sur l’API REST déjà présente dans le cœur de WordPress.
La fonction register_rest_route(), disponible depuis WordPress 4.4, permet de déclarer un point de terminaison sur mesure, rattaché à un espace de nom propre à l’agence, sans dépendre d’aucune extension supplémentaire. C’est la même fonction qui sert de base à des extensions bien plus complexes, mais son usage direct pour un besoin ciblé reste simple.
Déclarer la route
add_action('rest_api_init', function () {
register_rest_route('agence-audit/v1', '/scores', [
'methods' => 'GET',
'callback' => 'agence_audit_get_scores',
'permission_callback' => 'agence_audit_verifier_permission',
'args' => [
'page' => [
'default' => 1,
'sanitize_callback' => 'absint',
],
],
]);
});
L’espace de nom agence-audit/v1 évite toute collision avec les routes natives de WordPress ou celles d’autres extensions. Le paramètre page, assaini via absint, prépare d’emblée la pagination, plutôt que de renvoyer l’ensemble des scores en une seule réponse potentiellement volumineuse.
Construire la réponse

function agence_audit_get_scores(WP_REST_Request $request) {
$page = $request->get_param('page');
$par_page = 50;
$requete = new WP_Query([
'post_type' => 'post',
'posts_per_page' => $par_page,
'paged' => $page,
'meta_key' => '_a11y_score',
'orderby' => 'meta_value_num',
'order' => 'ASC',
]);
$resultats = [];
foreach ($requete->posts as $article) {
$resultats[] = [
'id' => $article->ID,
'titre' => get_the_title($article),
'score' => (int) get_post_meta($article->ID, '_a11y_score', true),
];
}
return new WP_REST_Response([
'page' => $page,
'total_pages' => $requete->max_num_pages,
'resultats' => $resultats,
], 200);
}
Retourner explicitement total_pages dans la réponse permet à l’outil de suivi externe de paginer sa propre collecte sans deviner le nombre total d’enregistrements, et sans multiplier les appels superflus une fois la dernière page atteinte.
Éviter les ruptures côté outil externe
- Verser un numéro de version dans l’espace de nom (
v1) dès la première version, pour pouvoir faire évoluer le format de réponse sans casser les intégrations existantes - Documenter le schéma de réponse exact (types, champs obligatoires) dans un fichier séparé consulté par l’équipe qui maintient l’outil externe
- Renvoyer des types cohérents : un score toujours en entier, jamais tantôt en chaîne, tantôt en nombre, selon les articles
- Prévoir un code d’erreur explicite (403, 404) plutôt qu’un tableau vide silencieux en cas de problème de permission ou d’absence de données
Vérifier la route depuis la ligne de commande
Avant de brancher l’outil de suivi externe, un test direct via WP-CLI confirme que la route répond correctement sans dépendre du client HTTP final :
wp eval 'print_r( rest_do_request( new WP_REST_Request( "GET", "/agence-audit/v1/scores" ) )->get_data() );'
Cette commande exécute la requête REST directement dans le contexte PHP de WordPress, sans passer par une requête HTTP réelle, ce qui isole rapidement un problème de logique métier d’un problème de configuration serveur ou de réécriture d’URL.
Sur nos intégrations de tableaux de bord multi-sites, la règle qui nous a évité le plus de régressions : jamais de champ optionnel silencieusement absent, toujours une valeur par défaut explicite dans la réponse.
En résumé
Exposer des scores d’accessibilité via une route REST personnalisée reste à la portée d’un seul fichier de fonctions, sans extension supplémentaire, grâce à register_rest_route(). Le soin à apporter porte moins sur la déclaration de la route elle-même que sur la stabilité du format de réponse dans la durée : versionner l’espace de nom, paginer dès le départ, et documenter précisément ce que l’outil de suivi externe peut attendre de chaque champ.