[AUTOMATIQUE] Cet article a plus de 5 ans.
Il se peut donc que les informations qu'il fournit ne soient plus totalement exactes.

WordPress intègre nativement différents états de posts, il s’agit des 8 posts status suivants :

  • Published
  • Future
  • Draft
  • Pending
  • Private
  • Trash
  • Auto-Draft
  • Inherit

Si vous avez besoin d’en ajouter, c’est tout à fait possible et parfoit très utile dans la cadre d’un Worflow de validation poussé.

L’exemple qui suit m’a servi à créer un nouvel état de post afin de le rendre inaccessible, mais de pouvoir le republier par la suite. Il ne s’agit pas d’un brouillon, ni d’un post en attente de relecture, mais d’un post qui n’est plus valable car dépassé.

Voici comment procéder :

//enregistrement du CPS
function custom_post_status_bweb(){
	register_post_status( 'outdated', array(
		'label'                     => 'outdated',
		'public'                    => false,
		'exclude_from_search'       => true,
		'show_in_admin_all_list'    => true,
		'show_in_admin_status_list' => true,
		'label_count'               => _n_noop( 'Dépassé <span class="count">(%s)</span>', 'Dépassé <span class="count">(%s)</span>' ),
	) );
}
add_action( 'init', 'custom_post_status_bweb' );

//affichage du CPS dans le menu déroulant (seul sur la page d'édition du post (edition full) --> en cours de maj sur le coeur)
function append_post_status_list_bweb(){
     global $post;
     $complete = '';
     $label = '';
     if($post->post_type == 'post'){
          if($post->post_status == 'outdated'){
               $complete = ' selected=\"selected\"';
               $label = '<span id=\"post-status-display\"> Dépassé</span>';
          }
          echo '
			  <script>
			  jQuery(document).ready(function($){
				   $("select#post_status").append("<option value=\"outdated\" '.$complete.'>Dépassé</option>");
				   $(".misc-pub-section label").append("'.$label.'");
			  });
			  </script>
          ';
     }
}
add_action('admin_footer-post.php', 'append_post_status_list_bweb');

//affiche l'état à côté du titre dans la liste 'all' lorsque le statut est public
function display_state_post_status_bweb( $states ) {
     global $post;
     $arg = get_query_var( 'post_status' );
     if($arg != 'outdated'){
          if($post->post_status == 'outdated'){
               return array('Dépassé');
          }
     }
    return $states;
}
add_filter( 'display_post_states', 'display_state_post_status_bweb' );

Vous pouvez créer un CPS pour un type de contenu donné, ici il s’agit du type de contenu ‘post’, mais il vous suffit de le modifier selon vos besoins.

A noter également qu’il n’est pas aujourd’hui possible de changer le post status d’un post par un post statut custom depuis l’édition rapide car le cœur WordPress ne le permet pas.

Article rédigé parBrice CAPOBIANCO

Autodidacte passionné par WordPress. J'aime apprendre et créer pour ensuite partager !

Coorganisateur des Meetups WordPress Rennes et fondateur de bweb.
Partager cet article

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