Un tableau de bord commercial sans indicateur de fraîcheur des données, c’est comme un tableau de bord de voiture sans jauge de carburant : les chiffres sont peut-être justes, mais personne ne sait s’ils datent de la dernière minute ou de la semaine passée. C’est exactement le doute qui s’était installé chez une équipe commerciale utilisant un CRM externe — HubSpot, dans ce cas — alimenté automatiquement par les formulaires du site WordPress : les leads arrivaient bien, mais personne ne pouvait dire avec certitude si la synchronisation fonctionnait encore normalement ou si elle était silencieusement cassée depuis plusieurs jours.
La synchronisation elle-même — un appel à l’API HubSpot déclenché à chaque soumission de formulaire — fonctionnait très bien et n’avait pas besoin d’être reconstruite. Ce qui manquait, c’était simplement une trace visible de son dernier succès, consultable sans avoir à ouvrir les journaux serveur.
Enregistrer un horodatage à chaque envoi réussi
La fonction existante d’envoi vers HubSpot recevait déjà une réponse de l’API à chaque appel. Il suffisait d’exploiter cette réponse pour enregistrer un horodatage en cas de succès, via une simple option WordPress :
function wpm_envoyer_lead_hubspot( $donnees_lead ) {
$reponse = wp_remote_post( 'https://api.hubapi.com/crm/v3/objects/contacts', array(
'headers' => array( 'Authorization' => 'Bearer ' . WPM_HUBSPOT_TOKEN ),
'body' => wp_json_encode( array( 'properties' => $donnees_lead ) ),
) );
if ( ! is_wp_error( $reponse ) && 200 === wp_remote_retrieve_response_code( $reponse ) ) {
update_option( 'wpm_derniere_sync_hubspot', time() );
return true;
}
update_option( 'wpm_derniere_erreur_sync_hubspot', time() );
return false;
}
Deux options distinctes sont enregistrées : l’une pour le dernier succès, l’autre pour la dernière erreur rencontrée. Cette séparation permet, par exemple, d’afficher un avertissement si une erreur récente est survenue après le dernier succès enregistré — signe qu’un problème est probablement apparu depuis.
Afficher l’information dans un widget de tableau de bord

function wpm_widget_sync_hubspot() {
$derniere_sync = get_option( 'wpm_derniere_sync_hubspot' );
$derniere_erreur = get_option( 'wpm_derniere_erreur_sync_hubspot' );
if ( ! $derniere_sync ) {
echo '<p>Aucune synchronisation HubSpot enregistrée pour le moment.</p>';
return;
}
printf(
'<p>Dernière synchronisation réussie : %s</p>',
esc_html( human_time_diff( $derniere_sync ) . ' avant maintenant' )
);
if ( $derniere_erreur && $derniere_erreur > $derniere_sync ) {
echo '<p style="color:#a94442;">Une erreur est survenue depuis la dernière synchronisation réussie.</p>';
}
}
add_action( 'wp_dashboard_setup', function() {
wp_add_dashboard_widget(
'wpm_sync_hubspot_widget',
'Synchronisation CRM',
'wpm_widget_sync_hubspot'
);
} );
La fonction native human_time_diff() transforme l’horodatage brut en une phrase lisible (« il y a 12 minutes »), bien plus parlante pour une équipe commerciale qu’un timestamp Unix ou une date au format technique.
Pourquoi un widget de tableau de bord plutôt qu’une page dédiée
Le tableau de bord d’administration WordPress est l’écran que l’équipe commerciale consultait déjà quotidiennement pour d’autres informations. Ajouter une page séparée dans un sous-menu aurait exigé de leur apprendre un nouveau chemin de navigation, pour une information qu’ils souhaitaient au contraire voir passivement, sans effort de recherche.
- Widget visible dès la connexion à l’administration, sans clic supplémentaire
- Restreint aux rôles commerciaux via
current_user_can()dans la fonction d’enregistrement du widget - Aucune information technique brute affichée, seulement une phrase et, le cas échéant, une alerte
Ce que cet indicateur ne fait pas
Ce widget signale qu’une synchronisation a eu lieu récemment, il ne garantit pas que chaque lead individuel a bien été transmis : un envoi ponctuel en échec, suivi d’un envoi réussi pour un autre lead quelques minutes plus tard, resterait invisible avec ce seul indicateur global. Un suivi lead par lead, avec statut individuel, constituerait une évolution possible mais nettement plus lourde à mettre en place.
En résumé
Deux options WordPress et un widget de tableau de bord suffisent à transformer une synchronisation CRM invisible en indicateur de confiance consulté quotidiennement par l’équipe commerciale, sans toucher à la logique d’envoi elle-même.