register_post_status()
Register a post status. Do not use before init.
A simple function for creating or modifying a post status based on the parameters given. The function will accept an array (second optional parameter), along with a string for the post status name.
Arguments prefixed with an _underscore shouldn't be used by plugins and themes.
No Hooks.
Return
Object
.
Usage
register_post_status( $post_status, $args );
- $post_status(string) (required)
- Name of the post status.
- $args(array|string)
Array or string of post status arguments.
Default: array()
-
label(true|false|string)
A descriptive name for the post status marked for translation.
Default: value of $post_status -
label_count(array|false)
Nooped plural text from _n_noop() to provide the singular and plural forms of the label for counts.
Default: false which means the $label argument will be used for both the singular and plural forms of this label -
exclude_from_search(true|false)
Whether to exclude posts with this post status from search results.
Default: value of $internal -
_builtin(true|false)
Whether the status is built-in. Core-use only.
Default: false -
public(true|false)
Whether posts of this status should be shown in the front end of the site.
Default: false -
internal(true|false)
Whether the status is for internal use only.
Default: false -
protected(true|false)
Whether posts with this status should be protected.
Default: false -
private(true|false)
Whether posts with this status should be private.
Default: false -
publicly_queryable(true|false)
Whether posts with this status should be publicly- queryable.
Default: value of $public -
show_in_admin_all_list(true|false)
Whether to include posts in the edit listing for their post type.
Default: opposite value of $internal -
show_in_admin_status_list(true|false)
Show in the list of statuses with post counts at the top of the edit listings, e.g. All (12) | Published (9) | My Custom Status (2) Default is the opposite value of $internal. - date_floating(true|false)
Whether the post has a floating creation date.
Default: false
-
Examples
#1 An example of registering the status of a post called Unread
:
add_action( 'init', 'my_custom_post_status' ); function my_custom_post_status(){ register_post_status( 'unread', array( 'label' => _x( 'Unread', 'post' ), 'public' => true, 'exclude_from_search' => false, 'show_in_admin_all_list' => true, 'show_in_admin_status_list' => true, 'label_count' => _n_noop( 'Unread <span class="count">(%s)</span>', 'Unread <span class="count">(%s)</span>' ), ) ); }
#2 Maximum character length for the $post_status - is 20
We’re able to register a post status with longer than 20 characters, but we’re unable to save/update posts with it. Instead, the $wpdb->process_fields() method compares the converted data to the provided data and returns false
because they’re different.
global $wpdb; $res = $wpdb->get_col_length( $wpdb->posts, 'post_status' ); print_r( $res ); /* Array ( [type] => char [length] => 20 ) */
Notes
- Global. stdClass[]. $wp_post_statuses Inserts new post status object into the list
Changelog
Since 3.0.0 | Introduced. |