Family Encyclopedia >> Electronics

How to Add Custom Post Statuses in WordPress: Streamline Your Editorial Workflow

Want to add custom post statuses to your WordPress blog posts? Post statuses are essential editorial tools that help organize articles by their stage in the publishing process. In this guide, we'll walk you through simple ways to implement custom post statuses in WordPress, drawing from years of managing multi-author sites.

How to Add Custom Post Statuses in WordPress: Streamline Your Editorial Workflow

What Are WordPress Post Statuses and Why Do They Matter?

Post statuses indicate the current stage of a blog post during editing. For instance, unfinished posts are saved as "Draft," while published ones shift to "Published."

How to Add Custom Post Statuses in WordPress: Streamline Your Editorial Workflow

These statuses guide how WordPress handles and displays content. Drafts, for example, are automatically hidden from public areas like your homepage.

By default, WordPress includes these post statuses:

  • Draft: Saved but incomplete and unpublished.
  • Auto-Draft: Auto-saved revisions from WordPress's autosave feature.
  • Pending Review: Complete posts submitted for review, awaiting publication.
  • Future: Scheduled for later publishing.
  • Private: Restricted to authorized users only.
  • Trash: Deleted items.
  • Inherit: Child pages that match their parent's status.

Beyond these, you can create custom statuses to fit your workflow—like "Not Suitable" for fully written but unpublishable posts.

Let's dive into proven methods to add them.

Method 1: Using a Plugin (Recommended for Most Users)

This approach is straightforward and ideal for multi-author blogs, offering robust workflow management.

Install and activate the Edit Flow plugin. See our step-by-step WordPress plugin installation guide for details.

Once active, find "Edit Flow" in your admin menu, leading to its settings.

How to Add Custom Post Statuses in WordPress: Streamline Your Editorial Workflow

Enable features as needed, then click "Edit Statuses" under "Custom Statuses."

Edit Flow auto-adds these:

  • Pitch: For brainstorming new ideas; becomes default for new posts.
  • Assigned: Tag posts and assign authors.
  • In Progress: Indicates active writing, not yet readable.

How to Add Custom Post Statuses in WordPress: Streamline Your Editorial Workflow

Create your own by entering a name and description, then "Add New Status."

How to Add Custom Post Statuses in WordPress: Streamline Your Editorial Workflow

Your status appears for editing or deletion.

On a new post (Posts » Add New), edit the status dropdown below "Publish."

How to Add Custom Post Statuses in WordPress: Streamline Your Editorial Workflow

Select from all statuses, including customs. View by status at Posts » All Posts.

How to Add Custom Post Statuses in WordPress: Streamline Your Editorial Workflow

Method 2: Adding Custom Post Statuses via Code

Note: WordPress's post status API has limitations in the admin UI, requiring a JavaScript workaround. This method works but may need updates with core improvements.

To proceed, add this code to your theme's functions.php or a site-specific plugin. New to code? Check our guide on safely editing functions.php.

<?php
function wpb_custom_post_status() {
    register_post_status( 'rejected', array(
        'label'                     => _x( 'Rejected', 'post' ),
        'public'                    => false,
        'exclude_from_search'       => false,
        'show_in_admin_all_list'    => true,
        'show_in_admin_status_list' => true,
        'label_count'               => _n_noop( 'Rejected <span class="count">(%s)</span>', 'Rejected <span class="count">(%s)</span>' ),
    ) );
}
add_action( 'init', 'wpb_custom_post_status' );

// Add to admin dropdown with jQuery
add_action( 'admin_footer-post.php', 'wpb_append_post_status_list' );
function wpb_append_post_status_list() {
    global $post;
    if ( $post->post_type == 'post' ) {
        $complete = '';
        $label = 'Rejected';
        if ( $post->post_status == 'rejected' ) {
            $complete = ' selected="selected"';
        }
        echo '<script>
jQuery(document).ready(function($){
    $("select#post_status").append( "<option value=\"rejected\" ' . $complete . '>Rejected</option>" );
    $(".misc-pub-section label").append( "' . $label . '" );
});
</script>';
    }
}
?>

Replace "rejected" and "Rejected" with your custom status. This registers it and adds to the dropdown via jQuery.

How to Add Custom Post Statuses in WordPress: Streamline Your Editorial Workflow

This should empower your WordPress editorial process. Explore our 55+ essential WordPress tips for more.

Subscribe to our YouTube channel for video tutorials, and follow us on Twitter and Facebook.