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

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.