https://app.hubspot.com/contacts/{portalId}/record/0-1/{vid} : cette structure d’URL, une fois connue, permet de retrouver la fiche exacte d’un contact HubSpot sans passer par une recherche manuelle dans l’interface du CRM. Sur un site synchronisant déjà ses utilisateurs avec HubSpot (formulaire de contact, tunnel de vente, ou simple import de leads), l’identifiant de contact HubSpot (le vid) est généralement déjà stocké côté WordPress après la synchronisation. Reste à le rendre visible au bon endroit.
Ce tutoriel ne traite pas de la synchronisation des données elle-même entre WordPress et HubSpot — l’extension ou l’intégration API en place s’en charge déjà. L’objectif est d’ajouter, dans l’écran de profil utilisateur de l’administration WordPress, un lien direct construit à partir de cet identifiant déjà disponible, sans appel supplémentaire à l’API HubSpot.
Vérifier où vit l’identifiant HubSpot
La plupart des intégrations HubSpot pour WordPress stockent l’identifiant de contact synchronisé dans une meta utilisateur, souvent nommée selon la convention de l’extension utilisée. Une vérification rapide en base de données confirme le nom exact du champ.
SELECT meta_key, meta_value
FROM wp_usermeta
WHERE user_id = 42
AND meta_key LIKE '%hubspot%';
Sur les intégrations personnalisées, ce champ peut avoir été nommé _hubspot_contact_id ou équivalent au moment du développement initial de la synchronisation.
Construire l’URL de la fiche HubSpot
L’URL directe d’une fiche de contact HubSpot suit un format prévisible, nécessitant seulement l’identifiant du portail HubSpot (visible dans l’URL de n’importe quel écran HubSpot connecté) et l’identifiant du contact.

function wpmoderne_url_fiche_hubspot( $user_id ) {
$vid = get_user_meta( $user_id, '_hubspot_contact_id', true );
if ( ! $vid ) {
return null;
}
return sprintf(
'https://app.hubspot.com/contacts/%s/record/0-1/%s',
HUBSPOT_PORTAL_ID,
rawurlencode( $vid )
);
}
Ajouter le lien dans l’écran de profil utilisateur
Les hooks show_user_profile (pour son propre profil) et edit_user_profile (pour le profil consulté par un administrateur) permettent d’injecter une section personnalisée dans l’écran d’édition utilisateur.
Une fois la fonction wpmoderne_url_fiche_hubspot() disponible, l’affichage tient dans une seule fonction de rappel, branchée sur les deux crochets à la fois. Elle reçoit en paramètre l’objet WP_User du profil affiché, et n’écrit rien lorsque l’URL ne peut pas être construite.
add_action( 'show_user_profile', 'wpmoderne_afficher_lien_hubspot' );
add_action( 'edit_user_profile', 'wpmoderne_afficher_lien_hubspot' );
function wpmoderne_afficher_lien_hubspot( $utilisateur ) {
if ( ! current_user_can( 'edit_users' ) ) {
return;
}
$url = wpmoderne_url_fiche_hubspot( $utilisateur->ID );
?>
<h2>HubSpot</h2>
<table class="form-table" role="presentation">
<tr>
<th>Fiche du contact</th>
<td>
<?php if ( $url ) : ?>
<a href="<?php echo esc_url( $url ); ?>" target="_blank" rel="noopener noreferrer">
Ouvrir la fiche dans HubSpot
</a>
<?php else : ?>
<em>Aucun identifiant HubSpot n'est enregistré pour cet utilisateur.</em>
<?php endif; ?>
</td>
</tr>
</table>
<?php
}
Trois détails méritent l’attention. D’abord, le contrôle de la capacité edit_users : sur l’écran de son propre profil (show_user_profile), un abonné ou un client verrait sinon un lien vers une fiche de CRM qui ne le concerne pas, et dont il ne devrait pas connaître l’existence. Ensuite, esc_url() protège l’attribut href même si la valeur stockée en base a été altérée. Enfin, rel="noopener noreferrer" accompagne toujours target="_blank" pour que la page HubSpot ne garde aucune référence à l’administration WordPress.
Définir l’identifiant du portail
La fonction de construction s’appuie sur la constante HUBSPOT_PORTAL_ID. Le plus simple est de la déclarer dans le fichier wp-config.php, à côté des autres réglages propres à l’environnement, puis de vérifier sa présence avant de l’utiliser pour éviter une erreur fatale sur un site où elle serait absente.
// Dans wp-config.php
define( 'HUBSPOT_PORTAL_ID', '12345678' );
// Dans la fonction de construction de l'URL
if ( ! defined( 'HUBSPOT_PORTAL_ID' ) ) {
return null;
}
Le nombre à renseigner se lit dans la barre d’adresse de n’importe quel écran HubSpot connecté : c’est le premier nombre qui suit /contacts/. Conserver cette valeur en constante plutôt qu’en dur dans le code du thème permet de la changer entre un environnement de recette et la production sans toucher à la logique.
Afficher le lien dans la liste des utilisateurs
Le profil n’est pas toujours le meilleur point d’entrée : un commercial qui parcourt la liste des utilisateurs gagne du temps si le lien est déjà présent dans une colonne. Deux filtres suffisent : manage_users_columns déclare la colonne, et manage_users_custom_column produit son contenu pour chaque ligne.
add_filter( 'manage_users_columns', function ( $colonnes ) {
$colonnes['hubspot'] = 'HubSpot';
return $colonnes;
} );
add_filter( 'manage_users_custom_column', function ( $sortie, $colonne, $user_id ) {
if ( 'hubspot' !== $colonne ) {
return $sortie;
}
$url = wpmoderne_url_fiche_hubspot( $user_id );
if ( ! $url ) {
return '—';
}
return sprintf(
'<a href="%s" target="_blank" rel="noopener noreferrer">Fiche</a>',
esc_url( $url )
);
}, 10, 3 );
Le filtre manage_users_custom_column reçoit trois arguments ; il faut donc préciser 3 comme nombre d’arguments acceptés dans add_filter(), faute de quoi la fonction ne recevrait que la valeur de sortie.
Vérifier le résultat sans ouvrir la base
Pour tester sans attendre une vraie synchronisation, WP-CLI permet d’écrire directement la meta sur un utilisateur de test, puis de recharger son profil dans l’administration.
wp user meta update 42 _hubspot_contact_id 1234567
wp user meta get 42 _hubspot_contact_id
Le lien doit alors pointer vers https://app.hubspot.com/contacts/12345678/record/0-1/1234567. Le segment 0-1 désigne le type d’objet « contact » ; HubSpot emploie d’autres identifiants du même format pour les entreprises ou les transactions, mais ce tutoriel ne s’occupe que des contacts.
Les pièges à connaître
- Un identifiant obsolète : si deux fiches sont fusionnées dans HubSpot, l’identifiant stocké côté WordPress peut ne plus correspondre à la fiche conservée. Le lien mène alors à une fiche absente ou inattendue, et la synchronisation doit mettre la meta à jour.
- Les droits côté HubSpot : le lien ne donne aucun accès par lui-même. Le commercial qui clique doit être connecté à HubSpot et autorisé à voir ce contact, sans quoi il arrive sur un message de refus.
- Un autre nom de meta : la clé
_hubspot_contact_idest celle de l’exemple. Si l’extension de synchronisation en utilise une autre, c’est celle-là qu’il faut lire, d’où l’intérêt de la requête de vérification du début. - Une adresse différente selon le centre de données : certains comptes HubSpot sont hébergés sur un domaine d’application distinct de
app.hubspot.com. Copiez le début de l’URL depuis votre propre compte au lieu de le supposer.
Le meilleur raccourci est celui qui ne demande aucun appel de plus : la donnée était déjà là, il suffisait de la montrer au bon endroit.
Conclusion
Avec une fonction de construction de quelques lignes, une constante pour le portail et deux crochets, l’équipe commerciale passe d’un profil WordPress à la fiche HubSpot correspondante en un clic. Aucun appel à l’API n’est ajouté, aucune donnée n’est dupliquée : le lien reste un simple calcul à partir de l’identifiant que la synchronisation a déjà enregistré. Pensez à restreindre l’affichage par capacité, à échapper l’URL, et à tester le cas où l’identifiant est absent, qui est le plus fréquent sur un site où tous les utilisateurs ne sont pas des contacts du CRM.