Début de saison sportive : c’est souvent le moment où un club associatif redécouvre, trop tard, qu’une dizaine de licences ont expiré sans que personne n’ait pensé à prévenir les adhérents concernés. Un tableur partagé permet de suivre les dates, mais personne ne le consulte assez régulièrement pour anticiper les échéances une par une.
Construire ce suivi directement dans une extension WordPress, plutôt que de dépendre d’un service de notification tiers payant, reste tout à fait accessible avec les outils déjà présents dans le cœur : une métadonnée de date, une tâche planifiée quotidienne et l’envoi d’e-mails natif.
Étape 1 : stocker la date d’expiration sur la fiche adhérent
update_post_meta( $adherent_id, 'licence_expiration', '2021-09-15' );
Un type de contenu personnalisé adherent, avec cette métadonnée en date ISO, suffit pour représenter l’échéance de chaque licence sans dépendance à une table personnalisée.
Étape 2 : planifier une vérification quotidienne
function wpm_planifier_verification_licences() {
if ( ! wp_next_scheduled( 'wpm_verifier_licences' ) ) {
wp_schedule_event( time(), 'daily', 'wpm_verifier_licences' );
}
}
add_action( 'init', 'wpm_planifier_verification_licences' );
Planifier une seule tâche quotidienne, plutôt qu’une tâche par licence, évite de multiplier les événements wp_cron inutilement : la tâche unique parcourt ensuite l’ensemble des adhérents à chaque exécution.
Étape 3 : parcourir les adhérents et calculer l’échéance
add_action( 'wpm_verifier_licences', 'wpm_verifier_licences_callback' );
function wpm_verifier_licences_callback() {
$seuils = array( 30, 15, 3 );
$adherents = get_posts( array(
'post_type' => 'adherent',
'posts_per_page' => -1,
'fields' => 'ids',
) );
foreach ( $adherents as $id ) {
$expiration = get_post_meta( $id, 'licence_expiration', true );
if ( ! $expiration ) {
continue;
}
$jours_restants = (int) ceil( ( strtotime( $expiration ) - time() ) / DAY_IN_SECONDS );
if ( in_array( $jours_restants, $seuils, true ) ) {
wpm_envoyer_rappel_licence( $id, $jours_restants );
}
}
}

Étape 4 : envoyer le rappel avec wp_mail
function wpm_envoyer_rappel_licence( $adherent_id, $jours_restants ) {
$email = get_post_meta( $adherent_id, 'adherent_email', true );
$nom = get_the_title( $adherent_id );
if ( ! is_email( $email ) ) {
return;
}
$sujet = sprintf( 'Votre licence expire dans %d jours', $jours_restants );
$corps = sprintf(
"Bonjour %s,\n\nVotre licence sportive arrive à échéance dans %d jours. Merci de la renouveler auprès du secrétariat du club.\n\nSportivement,\nLe bureau.",
$nom,
$jours_restants
);
wp_mail( $email, $sujet, $corps );
}
Étape 5 : éviter les doublons d’envoi
Si la tâche quotidienne s’exécute deux fois le même jour, par exemple à cause d’une intervention manuelle ou d’un souci d’hébergement, un même rappel pourrait partir deux fois. Une métadonnée de suivi évite ce doublon :
- Enregistrer
licence_dernier_rappelavec la date du jour après chaque envoi - Vérifier cette valeur avant d’envoyer un nouveau rappel pour le même seuil
- Réinitialiser cette métadonnée lors du renouvellement effectif de la licence
Pourquoi ne pas passer par un service tiers
Pour un club associatif dont le budget reste limité, un service d’envoi transactionnel tiers ajoute un coût récurrent difficile à justifier pour quelques dizaines d’e-mails par mois. wp_mail(), correctement configuré avec un plugin SMTP si l’hébergeur le recommande, suffit largement à ce volume.
| Étape | Mécanisme WordPress |
|---|---|
| Stockage de l’échéance | Métadonnée de contenu |
| Vérification périodique | wp_schedule_event (daily) |
| Envoi du rappel | wp_mail() |
| Anti-doublon | Métadonnée de suivi du dernier envoi |
Sur un projet associatif à budget serré, la meilleure extension est souvent celle qui n’ajoute aucune dépendance tierce payante pour un besoin que le cœur de WordPress couvre déjà.
En résumé
Un système de rappel de licences sportives n’exige ni service payant ni architecture complexe : une métadonnée de date, une tâche planifiée quotidienne et l’envoi natif d’e-mails suffisent à couvrir le besoin d’un club associatif de taille modeste, avec un rythme de rappels qui limite à la fois les oublis et la lassitude des adhérents devant des notifications trop fréquentes.