Comment éviter qu’un badge affiché sur toutes les fiches d’un catalogue immobilier ne devienne un mensonge visuel dès qu’un bien ne dispose pas de la fonctionnalité annoncée ? C’est la question que pose souvent la mise en avant d’options optionnelles : visite virtuelle, vidéo de présentation, dossier de diagnostic technique en ligne. Le badge doit apparaître uniquement quand la donnée existe, jamais par défaut.
La tentation la plus fréquente est d’afficher le badge partout puis de le masquer en CSS selon une classe conditionnelle posée côté template. Cette approche fonctionne, mais elle duplique la logique métier entre PHP et CSS, et elle affiche brièvement le badge avant que le style ne s’applique sur les connexions lentes. Autant traiter la condition une bonne fois côté PHP, à la source.
Le champ qui pilote l’affichage
Sur une fiche de type bien_immobilier, la visite virtuelle est en général stockée sous forme d’une URL dans un champ personnalisé, par exemple visite_virtuelle_url créé via l’API native register_post_meta() ou via un champ ACF. Le badge ne doit dépendre que d’une seule vérité : ce champ est-il renseigné avec une valeur exploitable ?
Écrire la condition une seule fois
Plutôt que de répéter la vérification à chaque endroit où le badge peut apparaître (fiche détaillée, carte dans une liste, résultat de recherche), il est plus sûr de centraliser la logique dans une fonction unique :

function wpm_bien_a_visite_virtuelle( $post_id ) {
$url = get_post_meta( $post_id, 'visite_virtuelle_url', true );
return ! empty( $url ) && filter_var( $url, FILTER_VALIDATE_URL );
}
Cette fonction retourne un booléen fiable, en s’assurant au passage que la valeur enregistrée est bien une URL valide et non une chaîne vide laissée par erreur lors de la saisie. Elle peut ensuite être appelée partout où le badge doit s’afficher :
if ( wpm_bien_a_visite_virtuelle( get_the_ID() ) ) {
echo '<span class="badge-visite-virtuelle">Visite virtuelle disponible</span>';
}
Sur la carte d’une liste de résultats
Dans une boucle de recherche ou d’archive, la même fonction s’applique sans modification, avec l’identifiant du post courant transmis par la boucle WordPress :
while ( have_posts() ) :
the_post();
if ( wpm_bien_a_visite_virtuelle( get_the_ID() ) ) {
echo '<span class="badge-visite-virtuelle">Visite 360°</span>';
}
endwhile;
Variante avec un champ booléen plutôt qu’une URL
Si la visite virtuelle est hébergée sur un service externe et que seul un identifiant ou un statut d’activation est stocké côté WordPress, un champ booléen simple suffit :
- Un champ
true_falsenommévisite_virtuelle_activecôté ACF. - Une vérification
get_field( 'visite_virtuelle_active' )qui retourne directement un booléen exploitable. - Aucune validation d’URL nécessaire puisque le lien lui-même est géré ailleurs, par exemple dans l’intégration du lecteur de visite.
Éviter le badge sur un import en masse
Lorsque les fiches sont importées par lot depuis un logiciel de gestion immobilière, un champ vide peut parfois contenir la chaîne littérale "0" ou un espace insécable copié depuis un tableur. La fonction de vérification doit donc utiliser trim() avant de tester la valeur, afin d’éviter un badge affiché à tort sur une fiche sans visite réelle :
$url = trim( (string) get_post_meta( $post_id, 'visite_virtuelle_url', true ) );
Conseil maison : centralisez toujours la condition d’affichage d’un badge optionnel dans une seule fonction. Le jour où le nom du champ change, une seule ligne est à corriger plutôt que dix templates dispersés.
Ce que cette approche ne couvre pas
Cette technique ne vérifie pas que le lien de la visite virtuelle fonctionne réellement : une URL syntaxiquement valide peut pointer vers une ressource supprimée. Pour aller plus loin, une vérification périodique de disponibilité via une tâche planifiée pourrait compléter ce badge, mais elle sort du périmètre d’un simple affichage conditionnel et mérite un traitement dédié.
En résumé
Un badge conditionnel fiable repose sur une règle simple : une seule fonction, une seule source de vérité, appelée partout où le badge doit apparaître. Cette discipline évite les incohérences entre la fiche détaillée et les listes de résultats, et facilite grandement la maintenance le jour où la structure des champs évolue.