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

Extensions

Un livre d’or numérique pour des pompes funèbres, modéré avant publication

Un CPT avec statut personnalisé permet une validation humaine avant affichage, sans complexité de workflow éditorial lourd, pour un livre d'or sensible.

Par Clément Hadrot • 21 juin 2024 • 4 min de lecture • Aucun commentaire
Un livre d'or numérique pour des pompes funèbres, modéré avant publication

Une entreprise de pompes funèbres, qui souhaitait proposer sur chaque page dédiée à un défunt un livre d’or où les proches peuvent laisser un message, avait une exigence non négociable : aucun message ne devait apparaître publiquement sans validation humaine préalable, compte tenu de la sensibilité du contexte et du risque de messages inappropriés ou de spam.

Ce besoin, qui pourrait sembler nécessiter un système de commentaires personnalisé complexe, se résout avec un seul statut personnalisé ajouté au type de contenu du livre d’or, sans workflow éditorial à plusieurs étapes.

Le problème du statut « en attente » standard

WordPress fournit déjà un statut pending pour les articles en attente de relecture, mais son usage habituel dans l’interface d’administration standard reste pensé pour des rédacteurs qui soumettent du contenu éditorial à un administrateur, pas pour des messages soumis par le grand public depuis une page publique du site. Réutiliser pending tel quel aurait mélangé les messages du livre d’or avec d’éventuels autres contenus en attente, dans le même écran de gestion.

La solution retenue introduit un statut dédié, message_a_valider, propre au type de contenu message_livre_or, ce qui isole complètement la file de modération du reste de l’administration du site.

Déclarer le statut personnalisé

L'essentiel à retenir : register_post_status ajoute un statut intermédiaire dédié ; Le message doit rester invisible tant qu'il n'est pas validé ; Une notification informe le modérateur sans surcharger son quotidien
add_action( 'init', function () {
    register_post_status( 'message_a_valider', [
        'label'                     => 'En attente de validation',
        'public'                    => false,
        'internal'                  => true,
        'show_in_admin_status_list' => true,
        'label_count'               => _n_noop(
            'En attente de validation (%s)',
            'En attente de validation (%s)'
        ),
    ] );
} );

Le paramètre public à false garantit qu’un message dans ce statut n’apparaît jamais sur une URL publique, même en cas d’erreur d’affichage ailleurs dans le thème. Le paramètre show_in_admin_status_list ajoute ce statut au filtre par statut de l’écran de liste, ce qui simplifie la vie du modérateur qui veut isoler rapidement les messages en attente.

La soumission depuis le formulaire public

Le formulaire public, affiché sur la page du défunt, crée directement le message avec ce statut, jamais avec le statut publish :

function livre_or_enregistrer_message( array $donnees, int $defunt_id ): int {
    return wp_insert_post( [
        'post_type'    => 'message_livre_or',
        'post_status'  => 'message_a_valider',
        'post_title'   => sanitize_text_field( $donnees['nom'] ),
        'post_content' => sanitize_textarea_field( $donnees['message'] ),
        'post_parent'  => $defunt_id,
    ] );
}

Notifier sans surcharger le modérateur

Plutôt qu’un e-mail par message soumis, qui deviendrait vite ingérable en cas d’affluence sur une page très visitée, une notification groupée est envoyée une fois par jour via une tâche planifiée, uniquement s’il existe au moins un message en attente :

add_action( 'livre_or_notification_quotidienne', function () {
    $en_attente = get_posts( [
        'post_type'   => 'message_livre_or',
        'post_status' => 'message_a_valider',
        'numberposts' => -1,
    ] );

    if ( empty( $en_attente ) ) {
        return;
    }

    wp_mail(
        get_option( 'admin_email' ),
        sprintf( '%d message(s) en attente de validation', count( $en_attente ) ),
        'Rendez-vous dans l\'administration pour les valider.'
    );
} );

Points de vigilance de cette approche

  • Vérifier que le thème n’affiche jamais de requête qui ignore le filtre par statut par défaut de WordPress, qui exclut naturellement les statuts non publics des requêtes de front standard.
  • Ajouter une action de validation en masse dans l’écran de liste, via les actions groupées natives, pour accélérer la modération lors des pics d’affluence.
  • Conserver une trace de la date de validation, via une métadonnée dédiée, utile en cas de litige sur un message publié puis contesté.

Le conseil que je donne sur ce type de projet sensible : ne jamais réutiliser un statut existant à des fins qu’il n’a pas été pensé pour couvrir, même si cela semble économiser du code. Un statut dédié coûte quelques lignes et clarifie durablement l’intention.

En résumé

Un statut personnalisé, appliqué à un type de contenu dédié, suffit à construire une file de modération fiable pour un contenu sensible soumis par le public. Ce sujet couvre la modération des messages eux-mêmes ; la gestion des faire-part et de leur diffusion reste un besoin distinct non traité par cette recette.

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