wp-admin/includes/template.php:2254Echoes or returns the post states as HTML.
$postWP_Post$displaybooloptionaltruestringOne hook fires while _post_states() runs, in this order:
Filters the HTML string of post states.
function _post_states( $post, $display = true ) { $post_states = get_post_states( $post ); $post_states_html = ''; if ( ! empty( $post_states ) ) { $state_count = count( $post_states ); $separator = wp_get_list_item_separator(); $i = 0; $post_states_html .= ' — '; foreach ( $post_states as $state ) { ++$i; $suffix = ( $i < $state_count ) ? $separator : ''; $post_states_html .= "<span class='post-state'>{$state}{$suffix}</span>"; } } /** * Filters the HTML string of post states. * * @since 6.9.0 * * @param string $post_states_html All relevant post states combined into an HTML string for display. * E.g. `— <span class='post-state'>Draft, </span><span class='post-state'>Sticky</span>`. * @param array<string, string> $post_states A mapping of post state slugs to translated post state labels. * E.g. `array( 'draft' => __( 'Draft' ), 'sticky' => __( 'Sticky' ), ... )`. * @param WP_Post $post The current post object. */ $post_states_html = apply_filters( 'post_states_html', $post_states_html, $post_states, $post ); if ( $display ) { echo $post_states_html; } return $post_states_html;}Introduced in 2.7.0. Unchanged from 6.7.7 through 7.1.0.
Signature, return type and hooks compared across 5 parsed releases.
src/wp-admin/includes/template.php, and regenerated for each WordPress release so it tracks the code rather than a snapshot of it.