A WordPress-centric search engine for devs and theme authors



register_post_status ›

Since3.0.0
Deprecatedn/a
register_post_status ( $post_status, $args = array() )
Parameters: (2)
  • (string) $post_status Name of the post status.
    Required: Yes
  • (array|string) $args { Optional. Array or string of post status arguments. @type bool|string $label A descriptive name for the post status marked for translation. Defaults to value of $post_status. @type bool|array $label_count Descriptive text to use for nooped plurals. Default array of $label, twice. @type bool $exclude_from_search Whether to exclude posts with this post status from search results. Default is value of $internal. @type bool $_builtin Whether the status is built-in. Core-use only. Default false. @type bool $public Whether posts of this status should be shown in the front end of the site. Default false. @type bool $internal Whether the status is for internal use only. Default false. @type bool $protected Whether posts with this status should be protected. Default false. @type bool $private Whether posts with this status should be private. Default false. @type bool $publicly_queryable Whether posts with this status should be publicly- queryable. Default is value of $public. @type bool $show_in_admin_all_list Whether to include posts in the edit listing for their post type. Default is the opposite value of $internal. @type bool $show_in_admin_status_list 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. @type bool $date_floating Whether the post has a floating creation date. Default to false. }
    Required: No
    Default: array()
Returns:
  • (object)
Defined at:
Codex:

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.


Source

function register_post_status( $post_status, $args = array() ) {
	global $wp_post_statuses;

	if ( ! is_array( $wp_post_statuses ) ) {
		$wp_post_statuses = array();
	}

	// Args prefixed with an underscore are reserved for internal use.
	$defaults = array(
		'label'                     => false,
		'label_count'               => false,
		'exclude_from_search'       => null,
		'_builtin'                  => false,
		'public'                    => null,
		'internal'                  => null,
		'protected'                 => null,
		'private'                   => null,
		'publicly_queryable'        => null,
		'show_in_admin_status_list' => null,
		'show_in_admin_all_list'    => null,
		'date_floating'             => null,
	);
	$args     = wp_parse_args( $args, $defaults );
	$args     = (object) $args;

	$post_status = sanitize_key( $post_status );
	$args->name  = $post_status;

	// Set various defaults.
	if ( null === $args->public && null === $args->internal && null === $args->protected && null === $args->private ) {
		$args->internal = true;
	}

	if ( null === $args->public ) {
		$args->public = false;
	}

	if ( null === $args->private ) {
		$args->private = false;
	}

	if ( null === $args->protected ) {
		$args->protected = false;
	}

	if ( null === $args->internal ) {
		$args->internal = false;
	}

	if ( null === $args->publicly_queryable ) {
		$args->publicly_queryable = $args->public;
	}

	if ( null === $args->exclude_from_search ) {
		$args->exclude_from_search = $args->internal;
	}

	if ( null === $args->show_in_admin_all_list ) {
		$args->show_in_admin_all_list = ! $args->internal;
	}

	if ( null === $args->show_in_admin_status_list ) {
		$args->show_in_admin_status_list = ! $args->internal;
	}

	if ( null === $args->date_floating ) {
		$args->date_floating = false;
	}

	if ( false === $args->label ) {
		$args->label = $post_status;
	}

	if ( false === $args->label_count ) {
		// phpcs:ignore WordPress.WP.I18n.NonSingularStringLiteralSingle,WordPress.WP.I18n.NonSingularStringLiteralPlural
		$args->label_count = _n_noop( $args->label, $args->label );
	}

	$wp_post_statuses[ $post_status ] = $args;

	return $args;
}