« On a perdu douze adhérents l’an dernier, simplement parce que personne n’a pensé à leur redemander leur cotisation » : ce constat, formulé par le trésorier bénévole d’un club sportif amateur, résume un problème que je retrouve dans beaucoup d’associations gérées sans outil de gestion dédié. Les adhésions étaient enregistrées comme un type de contenu personnalisé sur le site du club, chacune avec sa propre date d’adhésion initiale, mais rien ne relançait automatiquement l’adhérent avant l’échéance annuelle.
La solution retenue s’appuie sur wp_schedule_single_event, programmé individuellement pour chaque adhérent, un mois avant sa date anniversaire d’adhésion. Contrairement à une tâche récurrente qui vérifierait chaque jour l’ensemble des adhésions, chaque adhérent porte son propre événement programmé, ce qui simplifie considérablement le raisonnement sur les dates.
Calculer la date anniversaire et programmer le rappel
À la création de l’adhésion, ou à son renouvellement, on calcule la prochaine échéance annuelle à partir de la date d’adhésion initiale, puis on programme l’événement de rappel un mois avant cette échéance.
add_action( 'save_post_adhesion', function ( $post_id ) {
if ( wp_is_post_revision( $post_id ) ) {
return;
}
$date_adhesion = get_post_meta( $post_id, 'date_adhesion', true );
if ( ! $date_adhesion ) {
return;
}
$annee_courante = (int) date( 'Y' );
$prochaine_echeance = strtotime( $annee_courante . '-' . date( 'm-d', strtotime( $date_adhesion ) ) );
if ( $prochaine_echeance < time() ) {
$prochaine_echeance = strtotime( '+1 year', $prochaine_echeance );
}
$date_rappel = strtotime( '-1 month', $prochaine_echeance );
wp_clear_scheduled_hook( 'ch_rappel_adhesion', array( $post_id ) );
if ( $date_rappel > time() ) {
wp_schedule_single_event( $date_rappel, 'ch_rappel_adhesion', array( $post_id ) );
}
} );

Envoyer un message personnalisé avec l’ancienneté de l’adhérent
Le message de rappel ne se contente pas d’annoncer une échéance : il rappelle le nombre d’années d’adhésion déjà écoulées, une information qui, selon le trésorier du club, a un effet positif sur le taux de renouvellement, en valorisant la fidélité de l’adhérent plutôt que de se limiter à une simple demande de paiement.
add_action( 'ch_rappel_adhesion', function ( $post_id ) {
$email = get_post_meta( $post_id, 'email_adherent', true );
$date_adhesion = get_post_meta( $post_id, 'date_adhesion', true );
if ( ! is_email( $email ) ) {
return;
}
$annees = (int) date( 'Y' ) - (int) date( 'Y', strtotime( $date_adhesion ) );
$sujet = 'Votre adhésion arrive à échéance dans un mois';
$corps = sprintf(
"Bonjour,\n\nCela fait %d an(s) que vous nous accompagnez, merci de votre fidélité.\nVotre adhésion arrive à échéance dans un mois : pensez à la renouveler pour continuer la saison avec nous.\n\nSportivement.",
max( $annees, 1 )
);
wp_mail( $email, $sujet, $corps );
} );
Reprogrammer automatiquement l’année suivante
Une fois le renouvellement effectué, un nouvel événement doit être programmé pour l’année suivante, sans attendre une nouvelle modification manuelle de la fiche d’adhésion. Ce recalcul se fait au moment où le statut de paiement passe à jour, indépendamment de toute autre modification de la fiche.
add_action( 'ch_adhesion_renouvelee', function ( $post_id ) {
update_post_meta( $post_id, 'date_adhesion', current_time( 'Y-m-d' ) );
do_action( 'save_post_adhesion', $post_id ); // Reprogramme le rappel pour l'année suivante.
} );
Ce que le club a observé après une saison complète
Après une saison complète avec ce dispositif en place, plusieurs constats ont émergé, partagés lors d’une assemblée générale du club :
- La majorité des renouvellements arrivaient dans les deux semaines suivant l’envoi du rappel, plutôt que de façon éparpillée sur l’ensemble de l’année comme auparavant.
- Quelques adhérents ont répondu directement à l’e-mail pour signaler un changement d’adresse électronique, une occasion inattendue de mettre à jour leurs coordonnées.
- Le nombre d’adhésions non renouvelées faute de rappel a nettement diminué par rapport à la saison précédente, un chiffre suivi manuellement par le trésorier dans son propre tableau de suivi.
Un rappel qui arrive au bon moment ne remplace pas l’engagement de l’adhérent, mais il évite qu’un simple oubli ne se transforme en départ silencieux du club.
Notre verdict
Ce dispositif ne traite volontairement pas le paiement en ligne de la cotisation, qui reste géré séparément par virement ou chèque selon les habitudes du club : l’automatisation couvre uniquement la relance, laissant le mode de paiement inchangé. Pour une association sans budget de développement conséquent, ce niveau d’automatisation reste largement accessible avec les seules fonctions natives de WordPress.