# Licences sportives : automatiser renouvellements et rappels dans une extension

> Un club sportif associatif peut suivre l'échéance de chaque licence et envoyer les rappels automatiquement, sans service tiers payant, avec les outils natifs de WordPress.

- Auteur : WordPress Développement
- Publié le : 2021-05-09
- Mis à jour le : 2021-05-09
- Catégorie : Extensions
- URL : https://www.wpmoderne.fr/extensions/licences-sportives-automatiser-renouvellements-rappels/

## L’essentiel

- Une métadonnée de date d'expiration suffit à piloter les rappels
- wp_schedule_event tourne une fois par jour, pas à chaque licence
- wp_mail avec un contenu HTML simple reste largement suffisant

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 );
        }
    }
}
```

> L'essentiel à retenir : Une métadonnée de date d'expiration suffit à piloter les rappels ; wp_schedule_event tourne une fois par jour, pas à chaque licence ; wp_mail avec un contenu HTML simple reste largement suffisant

## É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_rappel` avec 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.
