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' );

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.