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

Astuces

Un bouton « renvoyer le reçu fiscal » sur la fiche d’un don, email perdu

« Je n'ai jamais reçu mon reçu fiscal » : la phrase la plus fréquente au support d'une association en période de déclaration d'impôts.

Par WordPress Développement • 30 septembre 2026 • 5 min de lecture • Aucun commentaire
Un bouton « renvoyer le reçu fiscal » sur la fiche d'un don, email perdu

« Je n’ai jamais reçu mon reçu fiscal, pouvez-vous me le renvoyer ? » : ce message arrive par dizaines chaque année entre février et mai auprès d’une association qui gère ses dons en ligne sous WordPress, au moment où les donateurs préparent leur déclaration de revenus. Avant la mise en place d’un bouton de renvoi, chaque demande obligeait un membre de l’équipe à retrouver le don dans la base, relancer manuellement le générateur de PDF depuis une commande WP-CLI ou un script ad hoc, puis envoyer l’e-mail à la main. Vingt minutes par demande, multipliées par le volume de la période fiscale, cela occupait une personne à temps plein pendant plusieurs semaines.

La correction ne consiste pas à améliorer la délivrabilité de l’e-mail initial — un sujet réel mais distinct — mais à donner à l’équipe support un moyen direct de régénérer et renvoyer le justificatif depuis la fiche du don elle-même, sans recréer aucune donnée ni repasser par le tunnel de don.

Régénérer plutôt que retrouver un fichier

Le piège le plus courant consiste à stocker le PDF généré une seule fois, au moment du don, dans la médiathèque, puis à espérer le retrouver plus tard. Un fichier peut avoir été supprimé par erreur, l’extension de génération de PDF a pu changer de format entre-temps, ou le modèle de reçu fiscal a évolué. Régénérer le PDF à la demande, à partir des données brutes du don stockées en post_meta, garantit un document toujours cohérent avec le don réel, même des années après.

add_action( 'admin_post_renvoyer_recu_fiscal', function () {
    check_admin_referer( 'renvoyer_recu_fiscal' );

    $don_id = absint( $_GET['don_id'] ?? 0 );
    if ( ! current_user_can( 'edit_post', $don_id ) ) {
        wp_die( esc_html__( 'Action non autorisée.', 'agence-dons' ) );
    }

    $donateur_email = get_post_meta( $don_id, '_donateur_email', true );
    $montant        = get_post_meta( $don_id, '_montant_don', true );
    $date_don        = get_post_meta( $don_id, '_date_don', true );

    if ( ! $donateur_email || ! $montant ) {
        wp_die( esc_html__( 'Données du don incomplètes, impossible de régénérer le reçu.', 'agence-dons' ) );
    }

    $pdf_path = agence_generer_recu_fiscal_pdf( $don_id, $donateur_email, $montant, $date_don );

    $envoye = wp_mail(
        $donateur_email,
        __( 'Votre reçu fiscal', 'agence-dons' ),
        __( 'Veuillez trouver ci-joint votre reçu fiscal.', 'agence-dons' ),
        array(),
        array( $pdf_path )
    );

    update_post_meta( $don_id, '_dernier_renvoi_recu', current_time( 'mysql' ) );
    update_post_meta( $don_id, '_nombre_renvois_recu', 1 + (int) get_post_meta( $don_id, '_nombre_renvois_recu', true ) );

    wp_safe_redirect( add_query_arg( 'recu_renvoye', $envoye ? '1' : '0', get_edit_post_link( $don_id, 'raw' ) ) );
    exit;
} );

Le bouton, sur l’écran où l’équipe travaille déjà

Une metabox sur l’écran d’édition du don, affichant la date du dernier envoi et un bouton de renvoi, évite à l’équipe support de sortir de son flux de travail habituel pour traiter la demande.

L'essentiel à retenir : Régénérer le PDF à partir des données du don, sans dépendre d'un cache ; Ne jamais recréer un nouveau don pour renvoyer un justificatif ; Consigner chaque renvoi pour l'historique de la relation donateur
add_action( 'add_meta_box', function () {
    add_meta_box(
        'recu_fiscal_actions',
        __( 'Reçu fiscal', 'agence-dons' ),
        function ( $post ) {
            $dernier_envoi = get_post_meta( $post->ID, '_dernier_renvoi_recu', true );
            $url = wp_nonce_url(
                admin_url( 'admin-post.php?action=renvoyer_recu_fiscal&don;_id=' . $post->ID ),
                'renvoyer_recu_fiscal'
            );

            if ( $dernier_envoi ) {
                printf( '<p>%s %s</p>', esc_html__( 'Dernier envoi :', 'agence-dons' ), esc_html( $dernier_envoi ) );
            }

            printf(
                '<a href="%s" class="button button-primary">%s</a>',
                esc_url( $url ),
                esc_html__( 'Renvoyer le reçu fiscal', 'agence-dons' )
            );
        },
        'don',
        'side'
    );
} );

Consigner sans multiplier les objets

Toute la tentation, face à une demande de renvoi, est de créer un nouveau don « fictif » pour représenter l’envoi, ce qui fausse immédiatement toutes les statistiques de collecte. Un compteur simple _nombre_renvois_recu et une date _dernier_renvoi_recu sur le don d’origine suffisent à conserver l’historique sans jamais dupliquer la donnée financière elle-même.

  • Un seul don reste la source de vérité, jamais de duplication pour un renvoi
  • Le PDF est toujours régénéré à la demande, jamais recherché dans un stockage incertain
  • Chaque renvoi est daté et compté, utile en cas de contestation ou d’audit

Un donateur qui redemande deux fois son reçu fiscal n’est pas un problème à résoudre en amont, c’est un signal que la période fiscale approche ; mieux vaut un bouton prêt qu’une procédure de secours improvisée.

Pour aller plus loin

Cette approche se généralise facilement à d’autres justificatifs récurrents dans le secteur associatif : attestation de bénévolat, facture d’adhésion, certificat de participation à un événement. Le principe reste identique dans chaque cas : les données brutes restent la seule source de vérité, le document est un artefact jetable et reproductible, jamais un fichier précieux à protéger comme s’il était irremplaçable.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

Développeur WordPress, passionné par Elementor, le FSE et l’automatisation par IA.

Voir tous ses articles

Dans la même veine

À lire aussi