vendredi 25 septembre 2026

À propos

Contact

Tips

Avertir quand un article n’a pas été mis à jour depuis plus d’un an

Un contenu ancien qui traîne sans relecture nuit à la crédibilité d'un site. Une colonne d'alerte dans la liste des articles suffit à le signaler.

Par Clément Hadrot • 8 avril 2024 • 5 min de lecture • Aucun commentaire
Avertir quand un article n'a pas été mis à jour depuis plus d'un an

Une agence de voyage en ligne avait ce problème classique : des guides de destination publiés trois ou quatre ans plus tôt continuaient d’apparaître dans les résultats de recherche, avec des informations sur les formalités d’entrée devenues obsolètes. Personne dans l’équipe éditoriale ne savait précisément quels articles avaient besoin d’une relecture, faute d’un indicateur visible directement dans l’administration.

La solution ne demandait pas un outil d’audit externe : une simple colonne ajoutée à la liste des articles, calculée à partir de la date de dernière modification réelle du contenu, suffisait à donner une vue d’ensemble immédiate.

Ajouter une colonne à la liste des articles

Deux hooks travaillent ensemble pour ajouter une colonne personnalisée : manage_posts_columns pour déclarer son en-tête, et manage_posts_custom_column pour en remplir le contenu, ligne par ligne :

add_filter( 'manage_posts_columns', function ( $colonnes ) {
    $colonnes['fraicheur_contenu'] = 'Fraîcheur';
    return $colonnes;
} );

add_action( 'manage_posts_custom_column', function ( $colonne, $post_id ) {
    if ( 'fraicheur_contenu' !== $colonne ) {
        return;
    }

    $derniere_modif = get_post_modified_time( 'U', false, $post_id );
    $jours_ecoules  = (int) ( ( time() - $derniere_modif ) / DAY_IN_SECONDS );
    $seuil          = apply_filters( 'agence_seuil_fraicheur_jours', 365 );

    if ( $jours_ecoules > $seuil ) {
        printf(
            '<span style="color:#b32d2e;font-weight:600;">⚠ %d jours</span>',
            $jours_ecoules
        );
    } else {
        printf( '<span style="color:#1e8a3c;">%d jours</span>', $jours_ecoules );
    }
}, 10, 2 );

Un seuil configurable, pas figé

L'essentiel à retenir : Comparer post_modified à un seuil configurable ; Une colonne personnalisée plutôt qu'un rapport séparé ; Le seuil doit rester un filtre, pas une constante figée

Le seuil d’un an ne convient pas à tous les types de contenu. Sur ce site de voyage, les guides pratiques (formalités, vaccins, saison touristique) méritaient une relecture bien plus fréquente que les récits d’expérience, moins sensibles au temps. Plutôt que d’écrire une constante fixe, le seuil passe par un filtre apply_filters(), ce qui permet de le personnaliser selon le type de post sans toucher au code principal :

add_filter( 'agence_seuil_fraicheur_jours', function ( $seuil ) {
    if ( 'guide-pratique' === get_post_type() ) {
        return 180; // six mois pour les contenus sensibles au temps
    }

    return $seuil;
} );

Cette séparation entre le calcul générique et le seuil personnalisable est ce qui rend la colonne réutilisable d’un projet à l’autre : le code de la colonne ne change jamais, seul le filtre de seuil est adapté au contexte éditorial.

Rendre la colonne triable

Une colonne d’alerte perd une bonne partie de son intérêt si elle ne permet pas de trier les articles du plus daté au plus récent. Le hook manage_edit-post_sortable_columns déclare la colonne comme triable, et pre_get_posts précise le critère de tri réel à appliquer :

add_filter( 'manage_edit-post_sortable_columns', function ( $colonnes ) {
    $colonnes['fraicheur_contenu'] = 'fraicheur_contenu';
    return $colonnes;
} );

add_action( 'pre_get_posts', function ( WP_Query $requete ) {
    if ( ! is_admin() || 'fraicheur_contenu' !== $requete->get( 'orderby' ) ) {
        return;
    }

    $requete->set( 'orderby', 'modified' );
} );

En redirigeant le tri vers la colonne native modified de la table wp_posts, on évite d’avoir à créer une meta dédiée juste pour permettre le tri : la date de modification existe déjà nativement pour chaque article.

Aller plus loin : un filtre rapide dans la barre d’administration

Pour que l’équipe éditoriale retrouve rapidement les articles concernés sans avoir à trier manuellement chaque fois, un lien de filtre rapide au-dessus de la liste facilite l’usage quotidien, avec un paramètre d’URL personnalisé traité dans le même hook pre_get_posts :

add_action( 'pre_get_posts', function ( WP_Query $requete ) {
    if ( ! is_admin() || empty( $_GET['contenu_date'] ) ) {
        return;
    }

    $requete->set( 'date_query', array(
        array(
            'column' => 'post_modified',
            'before' => '1 year ago',
        ),
    ) );
} );
  • Ne confondez jamais post_date (date de publication initiale) et post_modified (dernière modification réelle) : c’est bien la seconde qui doit servir de référence ici.
  • Limitez la colonne aux types de post pertinents avec un test sur l’écran courant, pour ne pas l’imposer sur les pages statiques rarement révisées.
  • Prévoyez un moyen de « purger » l’alerte sans forcément republier tout l’article, par exemple un simple clic sur enregistrer en brouillon puis republier suffit à mettre à jour la date.

Un repère qui me sert sur tous les sites à fort volume de contenu : une alerte de fraîcheur n’a de valeur que si quelqu’un dans l’équipe a la responsabilité explicite de la consulter chaque mois. Sans ce rituel, la colonne devient un simple décor qu’on finit par ignorer.

Le bilan

Ce type de repère visuel, entièrement basé sur des données déjà présentes dans WordPress (la date de modification), coûte peu à mettre en place et redonne à l’équipe éditoriale une vraie visibilité sur l’état du contenu publié. C’est un investissement modeste qui évite qu’un guide périmé continue à circuler indéfiniment simplement parce que personne ne savait qu’il datait de plusieurs années.

Partager :

À propos de l'auteur

Clément Hadrot

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

Voir tous ses articles

Dans la même veine

À lire aussi