Function and usage of register_post_status() in wordpress


Answers ( 1 )


    The register_post_status() function in WordPress is used for creating or modifying a post status. This function plays a crucial role in customizing the workflow in a WordPress site by allowing you to introduce new post statuses or modify existing ones. Here's a detailed breakdown of its usage:

    Function Prototype:

    register_post_status( string $post_status, array|string $args = array() ): object


    • This function is used to register a new post status or modify an existing one.
    • It should be used after the init hook in WordPress, as using it before may lead to unexpected behavior.
    • The function takes a string for the post status name and an optional array or string of arguments to define the behavior and characteristics of the post status.


    1. $post_status (string, required): The name of the post status you want to register or modify.
    2. $args (array|string, optional): An array or string of arguments to define the properties of the post status. These include:
      • label (bool|string): A descriptive name for the post status, which is marked for translation. Defaults to the value of $post_status.
      • label_count (array|false): Provides singular and plural forms of the label for counts, usually derived from _n_noop(). If false, the $label argument is used for both forms.
      • exclude_from_search (bool): Determines if posts with this status are excluded from search results. Defaults to the value of $internal.
      • _builtin (bool): Indicates if the status is built-in. This is for core use only and defaults to false.
      • public (bool): Whether posts with this status should be shown on the front end. Defaults to false.
      • internal (bool): Specifies if the status is for internal use. Defaults to false.
      • protected (bool): Determines if posts with this status should be protected. Defaults to false.
      • private (bool): Whether posts with this status should be private. Defaults to false.
      • publicly_queryable (bool): If posts with this status should be publicly queryable. Defaults to the value of $public.
      • show_in_admin_all_list (bool): Whether to include posts in the edit listing for their post type. Defaults to the opposite value of $internal.
      • show_in_admin_status_list (bool): Shows this status in the list of statuses with post counts at the top of edit listings. Defaults to the opposite value of $internal.
      • date_floating (bool): Whether the post has a floating creation date. Defaults to false.

    Default Argument Values:

    • The default for $args is an empty array, meaning if no arguments are provided, the function will use default values for all parameters.


    • The function returns an object representing the post status.

    Sample Usage:

    function my_custom_post_status() {
        register_post_status( 'my_custom_status', array(
            'label'                     => _x( 'My Custom Status', 'post' ),
            'public'                    => true,
            'exclude_from_search'       => false,
            'show_in_admin_all_list'    => true,
            'show_in_admin_status_list' => true,
            'label_count'               => _n_noop( 'My Custom Status (%s)', 'My Custom Status (%s)' ),
    add_action( 'init', 'my_custom_post_status' );

    In this example, a custom post status called 'my_custom_status' is registered with specific labels, visibility settings, and inclusion in administrative lists. This custom status can then be used like standard WordPress statuses (e.g., 'draft', 'published').

Leave an answer