Le WordPress d'aujourd'hui, décodé pour les développeurs

Astuces

wp_insert_post_data : nettoyer automatiquement un titre d’annonce mal formaté

Sur une plateforme d'annonces ouverte aux utilisateurs, les titres saisis en majuscules ou truffés de ponctuation excessive nuisent à la lisibilité. Un filtre sur wp_insert_post_data corrige ce problème avant l'enregistrement.

Par WordPress Développement • 28 septembre 2022 • 4 min de lecture • Aucun commentaire
wp_insert_post_data : nettoyer automatiquement un titre d'annonce mal formaté
add_filter( 'wp_insert_post_data', 'wpm_normaliser_titre_annonce', 10, 2 );

Ce filtre s’exécute à un moment précis du cycle d’enregistrement d’un article : juste avant l’écriture en base de données, mais après que WordPress a préparé l’ensemble des champs du post. C’est l’endroit idéal pour corriger un titre saisi n’importe comment, sans jamais laisser transiter la version brute jusqu’à la table wp_posts.

Sur une plateforme d’annonces ouverte à la saisie directe des utilisateurs, les titres arrivent souvent dans un état peu engageant : tout en majuscules pour attirer l’attention, ponctués de plusieurs points d’exclamation consécutifs, ou précédés d’espaces superflus copiés depuis une autre application. Plutôt que de refuser ces annonces ou de demander une correction manuelle systématique, un filtre de normalisation automatique corrige le tir dès l’enregistrement.

Identifier les cas à corriger

Trois défauts reviennent le plus souvent sur ce type de plateforme : les titres entièrement en majuscules, la ponctuation répétée sans raison, et les espaces multiples ou en début et fin de chaîne. Chacun se corrige avec une fonction native de PHP, sans dépendance externe.

Écrire le filtre de normalisation

L'essentiel à retenir : Le filtre wp_insert_post_data intercepte les données juste avant l'écriture en base ; La normalisation s'applique uniquement au titre, jamais au contenu de l'annonce ; Aucune capacité de modération manuelle n'est nécessaire pour ce nettoyage
function wpm_normaliser_titre_annonce( $data, $postarr ) {
    if ( 'annonce' !== $data['post_type'] ) {
        return $data;
    }

    $titre = $data['post_title'];

    // Retirer les espaces multiples et en bordure.
    $titre = trim( preg_replace( '/\s+/', ' ', $titre ) );

    // Réduire une ponctuation répétée à une seule occurrence.
    $titre = preg_replace( '/([!?.]){2,}/', '$1', $titre );

    // Transformer un titre tout en majuscules en casse normale.
    if ( $titre === mb_strtoupper( $titre, 'UTF-8' ) ) {
        $titre = mb_convert_case( mb_strtolower( $titre, 'UTF-8' ), MB_CASE_TITLE, 'UTF-8' );
    }

    $data['post_title'] = $titre;

    return $data;
}

Pourquoi vérifier l’égalité avant de convertir la casse

La comparaison $titre === mb_strtoupper( $titre, 'UTF-8' ) évite de transformer un titre qui contient volontairement un sigle en majuscules au milieu d’une phrase par ailleurs normale, comme « Vélo VTT en bon état ». Seule une chaîne entièrement en capitales déclenche la conversion, ce qui limite les faux positifs sur des titres légitimement composés d’acronymes.

Ne toucher qu’au titre, jamais au contenu

Le filtre wp_insert_post_data reçoit l’ensemble des données du post, y compris post_content. Il est tentant d’étendre la même logique de normalisation au corps de l’annonce, mais un texte descriptif rédigé par l’utilisateur mérite un traitement différent : une majuscule en début de phrase répétée volontairement pour insister n’a pas la même signification qu’un titre tapé sans réflexion. Ce filtre reste donc volontairement limité au seul champ post_title.

Vérifier avant et après avec WP-CLI

Pour valider le comportement sur des annonces existantes sans passer par l’interface d’administration, la commande WP-CLI wp post list permet d’inspecter rapidement les titres actuels :

wp post list --post_type=annonce --field=post_title --posts_per_page=20

Cette commande liste les vingt premiers titres d’annonces, un moyen rapide de repérer si des titres mal formatés existent déjà en base et mériteraient une correction rétroactive via un script dédié, distinct du filtre qui n’agit que sur les nouvelles saisies.

Variante : limiter la longueur du titre

  • Ajouter une troncature avec mb_substr() si le titre dépasse une longueur raisonnable, par exemple 80 caractères.
  • Avertir l’utilisateur côté formulaire avant l’enregistrement plutôt que de tronquer silencieusement, pour éviter toute confusion.
  • Combiner cette vérification avec un compteur de caractères affiché en direct dans le formulaire de dépôt d’annonce.

Conseil maison : un filtre de normalisation automatique doit toujours rester prévisible pour l’utilisateur. S’il modifie trop agressivement ce qu’il a saisi, mieux vaut afficher un message d’avertissement avant l’enregistrement plutôt que de corriger en silence.

En résumé

Le filtre wp_insert_post_data permet de corriger des titres mal formatés directement à la source, avant même leur écriture en base, sans imposer de contrainte de saisie stricte à l’utilisateur ni nécessiter de modération manuelle systématique. Cette normalisation légère améliore la lisibilité globale du catalogue d’annonces sans jamais toucher au contenu descriptif rédigé par chacun.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Partager :

À propos de l'auteur

WordPress Développement

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

Voir tous ses articles

Dans la même veine

À lire aussi