vendredi 25 septembre 2026

À propos

Contact

Tips

Ajouter une colonne « nombre de mots » à la liste des articles

Calculer et afficher une estimation de longueur directement dans le tableau d'administration, en réutilisant le contenu déjà chargé sans requête additionnelle.

Par Clément Hadrot • 5 janvier 2023 • 4 min de lecture • Aucun commentaire
Ajouter une colonne « nombre de mots » à la liste des articles

Une rédactrice en chef d’un site d’actualités locales avait pris l’habitude, avant chaque publication, d’ouvrir chaque brouillon un par un pour vérifier que la longueur restait cohérente avec la ligne éditoriale du média : ni brève expédiée en deux paragraphes, ni pavé de trois mille mots noyant le lecteur. Un travail répétitif qui pouvait pourtant se résumer en une seule colonne dans le tableau des articles.

Ajouter une colonne « nombre de mots » dans l’écran de liste des articles ne demande ni extension ni requête supplémentaire : le contenu de chaque article est déjà chargé en mémoire pour l’affichage de la liste elle-même, il suffit de le compter au bon moment.

Déclarer la colonne

function jr_ajouter_colonne_mots( $colonnes ) {
    $colonnes['nombre_mots'] = 'Longueur';
    return $colonnes;
}
add_filter( 'manage_post_posts_columns', 'jr_ajouter_colonne_mots' );
L'essentiel à retenir : str_word_count donne une estimation suffisante pour un usage éditorial ; Le contenu brut doit être débarrassé de ses balises avant comptage ; Aucune requête supplémentaire n'est nécessaire

Calculer et afficher la valeur

Le contenu brut d’un article contient des balises HTML, des raccourcis de blocs Gutenberg et des commentaires techniques qui fausseraient un comptage naïf. Il faut d’abord nettoyer ce contenu avant d’appliquer str_word_count() :

function jr_afficher_colonne_mots( $colonne, $post_id ) {
    if ( 'nombre_mots' !== $colonne ) {
        return;
    }

    $contenu_brut = get_post_field( 'post_content', $post_id );
    $texte_seul   = wp_strip_all_tags( strip_shortcodes( $contenu_brut ) );
    $nombre_mots  = str_word_count( $texte_seul );

    if ( $nombre_mots < 300 ) {
        $couleur = '#d63638'; // trop court
    } elseif ( $nombre_mots > 2500 ) {
        $couleur = '#dba617'; // très long
    } else {
        $couleur = '#00a32a'; // dans la cible
    }

    echo '<span style="color:' . esc_attr( $couleur ) . '; font-weight:600;">' . number_format_i18n( $nombre_mots ) . '</span> mots';
}
add_action( 'manage_post_posts_custom_column', 'jr_afficher_colonne_mots', 10, 2 );

Les seuils choisis ici, 300 et 2 500 mots, restent purement indicatifs et méritent d’être ajustés selon la ligne éditoriale réelle du média concerné.

Rendre la colonne triable

Trier par nombre de mots demande une astuce, puisque cette valeur n’existe pas nativement en base de données : la solution la plus simple consiste à stocker le comptage en meta à chaque sauvegarde, puis à trier sur cette meta plutôt que de recalculer à la volée pour un tri, ce qui serait beaucoup trop coûteux sur une grande table d’articles :

function jr_enregistrer_nombre_mots( $post_id, $post ) {
    if ( wp_is_post_revision( $post_id ) ) {
        return;
    }

    $texte_seul = wp_strip_all_tags( strip_shortcodes( $post->post_content ) );
    update_post_meta( $post_id, '_nombre_mots', str_word_count( $texte_seul ) );
}
add_action( 'save_post_post', 'jr_enregistrer_nombre_mots', 10, 2 );

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

function jr_appliquer_tri_nombre_mots( $query ) {
    if ( ! is_admin() || ! $query->is_main_query() ) {
        return;
    }
    if ( 'nombre_mots' === $query->get( 'orderby' ) ) {
        $query->set( 'meta_key', '_nombre_mots' );
        $query->set( 'orderby', 'meta_value_num' );
    }
}
add_action( 'pre_get_posts', 'jr_appliquer_tri_nombre_mots' );

Précision de l’estimation

  • str_word_count() compte les mots séparés par des espaces : un article riche en code source ou en tableaux verra son compte légèrement gonflé artificiellement.
  • Cette colonne donne une estimation éditoriale, pas une mesure exacte utilisable pour de la facturation au mot, qui demanderait un traitement bien plus rigoureux.
  • Le temps de lecture estimé affiché en front du site repose sur un calcul similaire mais reste un sujet à part, déjà traité séparément pour l’audience publique plutôt que pour l’équipe éditoriale.

Sur une rédaction avec plusieurs contributeurs, cette colonne visible en un coup d’œil remplace avantageusement des rappels manuels répétés à chaque publication.

En résumé

Une colonne « nombre de mots », calculée sans requête supplémentaire à partir du contenu déjà chargé, offre un repère éditorial immédiat directement dans la liste des articles. Rendue triable via une meta dédiée, elle devient un outil de suivi éditorial à part entière, distinct du temps de lecture affiché côté visiteur.

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