The display_post_states WordPress PHP filter allows you to modify the post display states used in the posts list table.
Usage
add_filter('display_post_states', 'your_custom_function', 10, 2); function your_custom_function($post_states, $post) { // your custom code here return $post_states; }
Parameters
$post_states
(string[]): An array of post display states.$post
(WP_Post): The current post object.
More information
See WordPress Developer Resources: display_post_states
Examples
Add a custom state to draft posts
Add “Under Review” state to draft posts:
add_filter('display_post_states', 'add_under_review_state', 10, 2); function add_under_review_state($post_states, $post) { if ($post->post_status == 'draft') { $post_states[] = '**Under Review**'; } return $post_states; }
Remove “Scheduled” state for future posts
add_filter('display_post_states', 'remove_scheduled_state', 10, 2); function remove_scheduled_state($post_states, $post) { if ($post->post_status == 'future' && isset($post_states['scheduled'])) { unset($post_states['scheduled']); } return $post_states; }
Add a custom state for posts with a specific meta key
add_filter('display_post_states', 'add_featured_state', 10, 2); function add_featured_state($post_states, $post) { if (get_post_meta($post->ID, '_featured', true)) { $post_states[] = '**Featured**'; } return $post_states; }
Replace “Private” state with “Hidden” for private posts
add_filter('display_post_states', 'change_private_state', 10, 2); function change_private_state($post_states, $post) { if ($post->post_status == 'private' && isset($post_states['private'])) { $post_states['private'] = '**Hidden**'; } return $post_states; }
Add a custom state for posts with a specific tag
add_filter('display_post_states', 'add_special_tag_state', 10, 2); function add_special_tag_state($post_states, $post) { if (has_tag('special', $post)) { $post_states[] = '**Special**'; } return $post_states; }