# Un rappel automatique par email trois jours avant un rendez-vous médical

> Programmer un envoi différé avec WP-Cron pour rappeler un rendez-vous médical, sans installer une extension complète de prise de rendez-vous.

- Auteur : WordPress Développement
- Publié le : 2022-09-08
- Mis à jour le : 2022-09-08
- Catégorie : Astuces
- URL : https://www.wpmoderne.fr/tips/rappel-automatique-email-rendez-vous-medical/

## L’essentiel

- Programmation d'un événement Cron à la création du rendez-vous
- Email envoyé exactement trois jours avant la date prévue
- Aucune extension de prise de rendez-vous ajoutée

Un SMS de rappel facturé à l'unité par une plateforme de téléphonie coûte quelques centimes ; un email de rappel programmé avec WP-Cron ne coûte rien de plus que quelques lignes de code et une bonne compréhension de la planification différée de WordPress. C'est cette deuxième option qu'un cabinet médical utilisant WordPress pour la prise de rendez-vous en ligne — sans extension de rendez-vous complète, seulement un CPT « rendez-vous » créé sur mesure — a choisi de mettre en place.

Le besoin restait ciblé : envoyer un email de rappel exactement trois jours avant chaque rendez-vous, sans queue d'envoi complexe, sans tableau de bord de notifications, et surtout sans dépendre d'un module de prise de rendez-vous complet qui aurait imposé de migrer tout le système existant.

## Programmer un événement Cron à la création du rendez-vous

Chaque rendez-vous, enregistré comme article du CPT `rendez_vous` avec un champ personnalisé `date_rdv`, déclenche à sa création la programmation d'un événement Cron unique, planifié précisément trois jours avant la date du rendez-vous :

```
function wpm_programmer_rappel( $post_id, $post ) {
    if ( 'rendez_vous' !== $post->post_type || 'publish' !== $post->post_status ) {
        return;
    }

    $date_rdv = get_post_meta( $post_id, 'date_rdv', true );
    $timestamp_rdv = strtotime( $date_rdv );
    $timestamp_rappel = $timestamp_rdv - ( 3 * DAY_IN_SECONDS );

    if ( $timestamp_rappel > time() ) {
        wp_schedule_single_event( $timestamp_rappel, 'wpm_envoyer_rappel_rdv', array( $post_id ) );
    }
}
add_action( 'save_post', 'wpm_programmer_rappel', 10, 2 );
```

`wp_schedule_single_event()` plutôt que `wp_schedule_event()` : le rappel ne doit se déclencher qu'une seule fois, jamais de façon récurrente. La condition `$timestamp_rappel > time()` évite de programmer un rappel dans le passé pour un rendez-vous pris à moins de trois jours d'échéance.

## Envoyer l'email au moment prévu

> L'essentiel à retenir : Programmation d'un événement Cron à la création du rendez-vous ; Email envoyé exactement trois jours avant la date prévue ; Aucune extension de prise de rendez-vous ajoutée

```
function wpm_envoyer_rappel_rdv( $post_id ) {
    $email_patient = get_post_meta( $post_id, 'email_patient', true );
    $date_rdv = get_post_meta( $post_id, 'date_rdv', true );

    if ( empty( $email_patient ) ) {
        return;
    }

    wp_mail(
        $email_patient,
        'Rappel : votre rendez-vous approche',
        sprintf( "Votre rendez-vous est prevu le %s.\nMerci de nous prevenir en cas d'empechement.", $date_rdv )
    );
}
add_action( 'wpm_envoyer_rappel_rdv', 'wpm_envoyer_rappel_rdv' );
```

L'action personnalisée `wpm_envoyer_rappel_rdv` sert à la fois de nom d'événement Cron et de nom de fonction de rappel, ce qui simplifie la lecture du code — une convention à adopter avec prudence sur un projet plus vaste, où la confusion entre les deux peut vite s'installer.

## Gérer l'annulation d'un rendez-vous

Un rendez-vous annulé après la programmation du rappel laisserait sinon un email partir pour un rendez-vous qui n'existe plus. Le nettoyage se fait via `wp_clear_scheduled_hook()`, déclenché sur le passage du rendez-vous au statut « annulé » :

- `wp_clear_scheduled_hook( 'wpm_envoyer_rappel_rdv', array( $post_id ) )` retire l'événement programmé
- Le second argument doit correspondre exactement aux arguments passés à la programmation initiale
- Sans cette précaution, un rendez-vous annulé génère malgré tout un email de rappel erroné

## Les limites de WP-Cron sur ce type d'envoi

WP-Cron ne se déclenche qu'à l'occasion d'une visite sur le site, ce qui peut décaler l'envoi de quelques minutes à quelques heures sur un site à faible trafic. Pour un rappel de rendez-vous programmé trois jours à l'avance, ce décalage reste largement acceptable ; il ne le serait pas pour un rappel programmé à la minute près. Un cron système véritable, déclenché indépendamment du trafic, reste recommandé si la précision devient critique.

## Vérifier qu'un rappel a bien été programmé

Pour rassurer le personnel du cabinet sur la fiabilité du dispositif, une colonne discrète a été ajoutée à la liste d'administration des rendez-vous, affichant simplement « Rappel programmé » ou « Aucun rappel » selon le résultat de `wp_next_scheduled()` pour ce rendez-vous précis. Ce petit ajout a suffi à couper court aux doutes exprimés lors des premières semaines d'utilisation, quand personne n'était encore certain que les emails partaient réellement.

## En résumé

Un rappel de rendez-vous programmé avec `wp_schedule_single_event()` et nettoyé avec `wp_clear_scheduled_hook()` couvre l'essentiel du besoin sans extension de prise de rendez-vous complète. Le vrai point de vigilance reste la gestion des annulations, trop souvent oubliée lors de la première mise en production.
