« Cet article a-t-il été relu par un humain, et par qui ? » Cette question, posée par un rédacteur en chef un peu inquiet devant la multiplication des brouillons générés à l’aide d’outils d’intelligence artificielle, n’a souvent aucune réponse traçable dans WordPress. Le contenu est publié, mais rien dans la base ne distingue un article rédigé de A à Z par un journaliste d’un article passé par un assistant IA puis simplement survolé.
La solution ne consiste pas à interdire l’usage de ces outils, devenus courants dans les rédactions depuis le début de l’année 2023, mais à rendre visible et obligatoire l’étape de relecture humaine qui doit toujours suivre.
Ajouter le champ de métadonnées
Le champ prend la forme d’une meta box classique, avec deux informations : la date de dernière vérification et l’identifiant de l’utilisateur qui l’a effectuée. On les stocke séparément plutôt que dans un seul champ texte, pour pouvoir les exploiter individuellement dans des requêtes ultérieures.
add_action( 'add_meta_boxes', function () {
add_meta_box(
'verification_humaine',
'Vérification humaine',
'afficher_meta_box_verification',
'post',
'side'
);
} );
function afficher_meta_box_verification( $post ) {
$date = get_post_meta( $post->ID, '_derniere_verif_date', true );
$par = get_post_meta( $post->ID, '_derniere_verif_par', true );
echo '<p>Dernière vérification : ' . ( $date ? esc_html( $date ) : 'jamais' ) . '</p>';
echo '<p>Par : ' . ( $par ? esc_html( get_userdata( $par )->display_name ) : '—' ) . '</p>';
echo '<button type="button" id="valider-verification">Je confirme avoir relu cet article</button>';
wp_nonce_field( 'verification_humaine_nonce', 'verification_nonce' );
}

Enregistrer la validation via AJAX
Le bouton déclenche un appel AJAX qui enregistre l’horodatage et l’auteur de la validation, sans recharger la page ni interférer avec la sauvegarde automatique de l’éditeur :
add_action( 'wp_ajax_valider_verification_humaine', function () {
check_ajax_referer( 'verification_humaine_nonce', 'nonce' );
$post_id = absint( $_POST['post_id'] );
if ( ! current_user_can( 'edit_post', $post_id ) ) {
wp_die( -1 );
}
update_post_meta( $post_id, '_derniere_verif_date', current_time( 'mysql' ) );
update_post_meta( $post_id, '_derniere_verif_par', get_current_user_id() );
wp_send_json_success();
} );
Bloquer la publication tant que le champ est vide
Pour que ce champ ne reste pas un simple gadget d’affichage, on ajoute une vérification côté save_post qui empêche le passage au statut publié si aucune validation humaine n’a été enregistrée dans les dernières vingt-quatre heures suivant la dernière modification substantielle du contenu.
Rendre l’information visible dans la liste des articles
Une colonne personnalisée dans l’écran edit.php permet au rédacteur en chef de repérer d’un coup d’œil les articles jamais vérifiés, sans ouvrir chaque brouillon un par un :
- Icône verte : vérifié il y a moins de sept jours
- Icône orange : vérifié il y a plus de sept jours mais modifié depuis
- Icône rouge : jamais vérifié
Ne pas confondre ce champ avec une mention de paternité de l’IA
Ce dispositif ne cherche pas à afficher publiquement qu’un article a été généré ou assisté par une IA — cette décision éditoriale relève d’un autre débat, propre à chaque rédaction. Il s’agit ici d’un outil de gouvernance interne, invisible du lectorat, qui garantit uniquement qu’une personne responsable a relu et validé le contenu avant sa mise en ligne.
Le problème n’est jamais l’outil de génération lui-même, mais l’absence de trace de la relecture qui doit obligatoirement le suivre.
Étendre le dispositif à la fréquence de mise à jour
Sur les contenus évolutifs (fiches pratiques, comparatifs de prix, actualités susceptibles d’être corrigées), on peut coupler ce champ à un rappel automatique : si un article dépasse trois mois sans nouvelle vérification, une notification interne invite à le relire, indépendamment de toute modification de son contenu.
En résumé
Un champ de métadonnées, une meta box et une colonne dans la liste des articles suffisent à instaurer une chaîne de responsabilité claire entre génération assistée et publication effective. Le coût de développement est faible ; le bénéfice, en revanche, se mesure surtout le jour où une erreur factuelle publiée doit être expliquée en interne.