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

Tips

Prévenir un client avant l’expiration d’un mandat de vente immobilier exclusif

Un mandat exclusif qui expire sans renouvellement fait perdre un dossier à une agence immobilière. Un email automatique calculé depuis la date de signature, déclenché par WP-Cron, referme cette faille de suivi.

Par Clément Hadrot • 28 juillet 2025 • 4 min de lecture • Aucun commentaire
Prévenir un client avant l'expiration d'un mandat de vente immobilier exclusif

Trente jours avant l’échéance d’un mandat exclusif, un rappel envoyé au bon moment peut transformer une négociation de renouvellement en simple formalité plutôt qu’en course contre la montre. À l’inverse, un mandat qui expire sans que personne ne l’ait vu venir renvoie un dossier vers la concurrence, parfois sans même une explication claire du côté du client.

Le suivi manuel de ces échéances dans un tableur finit toujours par montrer ses limites : une ligne oubliée, une date mal reportée, un agent en congé le jour où le rappel aurait dû partir. Automatiser ce calcul directement depuis la fiche du mandat, stockée comme type de contenu WordPress, referme cette faille durablement.

La donnée de départ : une seule date fiable

Sur un type de contenu mandat_vente, deux champs suffisent : date_signature_mandat et duree_mandat_mois, généralement fixée à trois mois pour un mandat exclusif. La date d’expiration ne doit jamais être saisie manuellement en parallèle, elle doit toujours être recalculée depuis ces deux champs pour éviter toute divergence.

Calculer l’échéance et le seuil de rappel

function wpm_date_expiration_mandat( $post_id ) {
    $signature = get_post_meta( $post_id, 'date_signature_mandat', true );
    $duree     = (int) get_post_meta( $post_id, 'duree_mandat_mois', true );

    if ( ! $signature || ! $duree ) {
        return false;
    }

    $date = new DateTime( $signature );
    $date->modify( "+{$duree} months" );

    return $date;
}
L'essentiel à retenir : Le rappel se calcule depuis la date de signature du mandat, pas depuis une saisie manuelle ; Un seul événement planifié quotidien suffit à couvrir tous les mandats ; Le champ d'envoi évite les doublons de rappel

La tâche planifiée quotidienne

Plutôt que de programmer un événement distinct par mandat, une seule tâche quotidienne parcourt l’ensemble des mandats actifs et compare chaque échéance à la date du jour :

if ( ! wp_next_scheduled( 'wpm_verifier_mandats_a_relancer' ) ) {
    wp_schedule_event( time(), 'daily', 'wpm_verifier_mandats_a_relancer' );
}

add_action( 'wpm_verifier_mandats_a_relancer', 'wpm_relancer_mandats_proches_echeance' );

function wpm_relancer_mandats_proches_echeance() {
    $mandats = get_posts( array(
        'post_type'      => 'mandat_vente',
        'posts_per_page' => -1,
        'meta_query'     => array(
            array(
                'key'     => 'statut_mandat',
                'value'   => 'actif',
            ),
        ),
    ) );

    foreach ( $mandats as $mandat ) {
        $expiration = wpm_date_expiration_mandat( $mandat->ID );

        if ( ! $expiration ) {
            continue;
        }

        $jours_restants = (int) ( ( $expiration->getTimestamp() - time() ) / DAY_IN_SECONDS );
        $deja_relance   = get_post_meta( $mandat->ID, 'rappel_expiration_envoye', true );

        if ( 30 === $jours_restants && ! $deja_relance ) {
            wpm_envoyer_email_rappel_mandat( $mandat->ID );
            update_post_meta( $mandat->ID, 'rappel_expiration_envoye', 1 );
        }
    }
}

Pourquoi comparer une valeur exacte plutôt qu’un seuil

Comparer $jours_restants à exactement 30 peut sembler fragile si la tâche planifiée manque un jour d’exécution suite à une maintenance serveur. Une variante plus robuste consiste à vérifier une plage, par exemple $jours_restants <= 30 && $jours_restants > 25, tout en conservant le champ rappel_expiration_envoye comme garde-fou contre les doublons.

Le contenu de l’email de rappel

L’email envoyé au client mentionne la date d’expiration exacte du mandat et propose un créneau de rendez-vous pour évoquer le renouvellement ou la stratégie de vente, en s’appuyant sur wp_mail() avec un gabarit HTML simple :

  • La date d’expiration calculée, formatée avec wp_date() pour respecter le fuseau horaire du site.
  • Le nom du bien concerné, récupéré via get_the_title( $mandat_id ).
  • Un lien direct vers la prise de rendez-vous, sans dépendre d’un formulaire de contact générique.

Conseil maison : ne recalculez jamais une date d’expiration à partir d’un champ saisi manuellement en parallèle de la date de signature. La moindre divergence entre les deux finit par envoyer un rappel au mauvais moment, ou pas du tout.

Ce que cette automatisation ne fait pas

Elle ne renouvelle pas automatiquement le mandat, elle se contente d’alerter à temps pour qu’une action humaine soit engagée. Le renouvellement effectif reste une décision commerciale et contractuelle qui implique un nouvel accord signé avec le client, hors du périmètre de ce simple mécanisme de rappel.

En résumé

Un calcul de date fiable, une tâche planifiée quotidienne et un champ de garde contre les doublons suffisent à transformer un suivi d’échéances autrefois manuel en filet de sécurité automatique. Le gain est direct : moins de mandats perdus faute de suivi, et une équipe commerciale qui peut se concentrer sur la négociation plutôt que sur la surveillance de dates dans un tableur.

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