# register_post_status : des statuts de workflow au-delà de publié

> Un studio de design veut qu'un article reste invisible du public mais clairement identifiable par le client comme « en validation », avec son propre libellé et son propre compteur dans l'administration.

- Auteur : Clément Hadrot
- Publié le : 2023-10-06
- Mis à jour le : 2023-10-06
- Catégorie : Extensions
- URL : https://wpmoderne.dev.wordpress-developpement.fr/extensions/register-post-status-statuts-workflow-au-dela-publie/

## L’essentiel

- Un statut personnalisé s'affiche dans le menu déroulant d'état comme les statuts natifs
- Le compteur de l'onglet de filtre en haut de liste nécessite un argument dédié
- Les capacités de lecture doivent être pensées séparément pour un client externe

Un studio de design produit des fiches de recommandations pour des clients externes, stockées comme un CPT `recommandation` dans WordPress. Le processus de travail comporte une étape intermédiaire cruciale : une fois rédigée par le designer, une fiche doit être visible par le client pour validation, sans être publique, et surtout sans se confondre visuellement avec un simple brouillon interne dans la liste d'administration. Le statut « Brouillon » natif ne porte pas cette nuance : il ne dit rien sur qui doit agir ensuite ni sur l'état réel du processus de validation.

La réponse à ce besoin ne passe pas par une métadonnée personnalisée affichée à côté du statut natif, une solution bancale qui demanderait de dupliquer la logique d'affichage un peu partout dans l'administration. La bonne réponse est de déclarer un véritable statut de publication personnalisé, avec `register_post_status()`, qui s'intègre alors nativement au même menu déroulant que « Publié » ou « Brouillon ».

## Déclarer le statut

```
add_action( 'init', function() {
    register_post_status( 'en_validation_client', array(
        'label'                     => _x( 'En validation client', 'statut de publication', 'studio-design' ),
        'public'                    => false,
        'internal'                  => false,
        'protected'                 => true,
        'private'                   => false,
        'show_in_admin_status_list' => true,
        'show_in_admin_all_list'    => true,
        'label_count'               => _n_noop(
            'En validation client (%s)',
            'En validation client (%s)',
            'studio-design'
        ),
    ) );
} );
```

Chaque argument porte une nuance précise qu'il vaut la peine de détailler. `public` à `false` garantit que ce statut ne rend jamais la fiche accessible publiquement, même en connaissant son URL directe. `protected` à `true` indique que ce contenu nécessite une capacité d'édition pour être consulté dans l'administration, ce qui exclut un simple abonné du site mais permet à un client disposant d'un rôle adapté d'y accéder, à condition que ce rôle porte la capacité appropriée. `show_in_admin_status_list` et `show_in_admin_all_list` déterminent respectivement l'apparition du statut dans le menu déroulant d'édition d'une fiche, et son inclusion dans l'onglet « Tous » de la liste d'administration.

## Ajouter le statut au menu déroulant de l'écran d'édition

> L'essentiel à retenir : Un statut personnalisé s'affiche dans le menu déroulant d'état comme les statuts natifs ; Le compteur de l'onglet de filtre en haut de liste nécessite un argument dédié ; Les capacités de lecture doivent être pensées séparément pour un client externe

Déclarer le statut avec `register_post_status()` ne suffit pas à le faire apparaître automatiquement dans le menu déroulant visible lors de l'édition d'une fiche : WordPress affiche ce menu à partir d'une liste fixe de statuts natifs, et il faut explicitement y ajouter les statuts personnalisés via un script JavaScript injecté sur l'écran d'édition, une limitation connue de longue date dans le cœur de WordPress :
