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

Extensions

Ne jamais rater un délai de prescription grâce à une extension WordPress

Un délai de prescription ne se rattrape pas une fois expiré. Voici comment une extension calcule ces échéances et alerte un cabinet sans dépendre d'un agenda externe.

Par WordPress Développement • 1 avril 2023 • 5 min de lecture • Aucun commentaire
Ne jamais rater un délai de prescription grâce à une extension WordPress

Un délai de prescription ne se rattrape pas : une fois expiré, le dossier est perdu, quelle que soit la solidité du dossier sur le fond. Pour un cabinet d’avocats qui suit plusieurs dizaines de dossiers en parallèle, chacun avec son propre point de départ et sa propre durée légale, s’appuyer sur la mémoire d’un collaborateur ou sur un agenda externe non synchronisé revient à accepter un risque évitable.

Une extension dédiée, construite autour d’un type de contenu personnalisé « dossier » et d’une tâche planifiée quotidienne, permet de calculer chaque échéance dès la saisie du fait générateur et d’alerter automatiquement bien avant l’expiration, sans dépendre d’un calendrier tiers ni d’une vérification manuelle régulière.

Modéliser le fait générateur et le délai applicable

Chaque dossier reçoit deux métadonnées essentielles : la date du fait générateur (signature d’un contrat, notification d’une décision, constatation d’un dommage) et la durée légale applicable, exprimée en années ou en mois selon la matière :

add_action( 'add_meta_boxes', function() {
    add_meta_box( 'dossier_prescription', 'Délai de prescription', function( $post ) {
        $fait  = get_post_meta( $post->ID, 'fait_generateur', true );
        $duree = get_post_meta( $post->ID, 'duree_mois', true );
        ?>
        <p><label>Fait générateur : <input type="date" name="fait_generateur" value="<?php echo esc_attr( $fait ); ?>"></label></p>
        <p><label>Durée (mois) : <input type="number" name="duree_mois" value="<?php echo esc_attr( $duree ); ?>"></label></p>
        <?php
    }, 'dossier' );
} );

Calculer l’échéance avec DateTime et DateInterval

L'essentiel à retenir : DateTime et DateInterval calculent l'échéance sans dépendance externe ; Une tâche cron quotidienne, pas un déclenchement à la visite ; Trois seuils d'alerte plutôt qu'une seule notification tardive

Plutôt que de manipuler des timestamps et des additions de secondes, sujettes à des erreurs sur les années bissextiles, les classes natives DateTime et DateInterval de PHP calculent l’échéance de façon fiable, mois calendaires compris :

function dossier_calculer_echeance( $post_id ) {
    $fait  = get_post_meta( $post_id, 'fait_generateur', true );
    $duree = (int) get_post_meta( $post_id, 'duree_mois', true );

    if ( empty( $fait ) || empty( $duree ) ) {
        return null;
    }

    $date = new DateTime( $fait );
    $date->add( new DateInterval( 'P' . $duree . 'M' ) );

    return $date;
}

add_action( 'save_post_dossier', function( $post_id ) {
    $echeance = dossier_calculer_echeance( $post_id );

    if ( $echeance ) {
        update_post_meta( $post_id, 'echeance_calculee', $echeance->format( 'Y-m-d' ) );
    }
} );

Stocker l’échéance calculée dans une métadonnée dédiée, plutôt que de la recalculer à chaque affichage, permet ensuite de la retrouver efficacement via WP_Query avec une meta_query comparant à la date du jour.

Une tâche planifiée quotidienne, pas une vérification à la visite

Vérifier les échéances uniquement lorsqu’un collaborateur ouvre l’administration ne garantit rien : un dossier oublié pendant les congés d’été ne sera jamais contrôlé si personne ne se connecte. Une tâche WP-Cron planifiée une fois par jour, indépendamment de tout trafic sur le site, est ici indispensable :

register_activation_hook( __FILE__, function() {
    if ( ! wp_next_scheduled( 'dossier_verifier_echeances' ) ) {
        wp_schedule_event( strtotime( 'today 06:00' ), 'daily', 'dossier_verifier_echeances' );
    }
} );

add_action( 'dossier_verifier_echeances', function() {
    $seuils = array( 90, 30, 7 );

    foreach ( $seuils as $jours ) {
        $date_cible = gmdate( 'Y-m-d', strtotime( "+{$jours} days" ) );

        $dossiers = get_posts( array(
            'post_type'  => 'dossier',
            'meta_key'   => 'echeance_calculee',
            'meta_value' => $date_cible,
            'numberposts' => -1,
        ) );

        foreach ( $dossiers as $dossier ) {
            if ( 'oui' !== get_post_meta( $dossier->ID, "alerte_{$jours}_envoyee", true ) ) {
                wp_mail( 'suivi@cabinet-juridique.test', "Échéance à {$jours} jours : {$dossier->post_title}", 'Vérification requise.' );
                update_post_meta( $dossier->ID, "alerte_{$jours}_envoyee", 'oui' );
            }
        }
    }
} );

Les trois seuils, quatre-vingt-dix, trente et sept jours, laissent le temps d’agir à chaque étape plutôt que de découvrir une échéance imminente en une seule alerte tardive. Le drapeau alerte_{jours}_envoyee évite de renvoyer le même message à chaque exécution quotidienne du cron.

Pourquoi ne pas dépendre d’un agenda externe

Un agenda tiers impose une synchronisation, un compte utilisateur par collaborateur, et un risque de désynchronisation en cas de modification du fait générateur en cours de dossier. En gardant le calcul et l’alerte dans WordPress, la source de vérité reste unique : le champ fait_generateur du dossier. Toute modification recalcule automatiquement l’échéance au prochain enregistrement, sans intervention manuelle sur un calendrier séparé.

Limites à connaître

Ce dispositif calcule des délais simples, à point de départ unique. Les délais suspendus ou interrompus par un acte de procédure, fréquents en droit, nécessitent une logique supplémentaire de recalcul manuel : l’extension doit alors permettre de modifier directement l’échéance calculée, avec un historique des modifications conservé en métadonnées, plutôt que de tout réautomatiser à l’excès.

En résumé

Le calcul fiable d’une échéance légale ne demande ni service tiers ni agenda synchronisé : DateTime, une tâche planifiée quotidienne et des seuils d’alerte progressifs suffisent à sécuriser un cabinet contre l’oubli, à condition de garder une trace claire de chaque alerte envoyée et de permettre l’ajustement manuel des cas particuliers.

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