get_post_status()WP 2.0.0

Получает статус указанной записи/поста: publish, draft и т.д.

Если функции был передан ID вложения (прикрепленной записи), то функция вернет статус родительской записи. Если вложение не прикреплено ни к какому посту, то оно будет считаться опубликованным - функция вернет publish.

Список базовых статусов в WordPress:

publish
future
draft
pending
private
trash
auto-draft
inherit

Возвращает

Строку|false. Статус записи при успехе, false если не удалось получить статус.

Работает на основе: get_post()
1 раз — 0.000357 сек (быстро) | 50000 раз — 0.29 сек (очень быстро) | PHP 7.0.5, WP 4.4.2
Хуки из функции

Использование

get_post_status( $post );
$post(число/WP_Post)
Идентификатор (ID) записи или объект записи WP_Post.
По умолчанию: null (текущая запись в цикле)

Примеры

1

#1 Выведем на экран статус поста с идентификатором 121

$status = get_post_status( 121 );
echo $status;
// выведет:
// publish, если пост опубликован.
// draft, если это черновик и т.д.
0

#2 Выведем локализованное название статуса поста

$status = get_post_status( 121 );
echo get_post_status_object( $status )->label; // Опубликовано

Список изменений

С версии 2.0.0 Введена.

Код get_post_status() WP 6.6.2

function get_post_status( $post = null ) {
	// Normalize the post object if necessary, skip normalization if called from get_sample_permalink().
	if ( ! $post instanceof WP_Post || ! isset( $post->filter ) || 'sample' !== $post->filter ) {
		$post = get_post( $post );
	}

	if ( ! is_object( $post ) ) {
		return false;
	}

	$post_status = $post->post_status;

	if (
		'attachment' === $post->post_type &&
		'inherit' === $post_status
	) {
		if (
			0 === $post->post_parent ||
			! get_post( $post->post_parent ) ||
			$post->ID === $post->post_parent
		) {
			// Unattached attachments with inherit status are assumed to be published.
			$post_status = 'publish';
		} elseif ( 'trash' === get_post_status( $post->post_parent ) ) {
			// Get parent status prior to trashing.
			$post_status = get_post_meta( $post->post_parent, '_wp_trash_meta_status', true );

			if ( ! $post_status ) {
				// Assume publish as above.
				$post_status = 'publish';
			}
		} else {
			$post_status = get_post_status( $post->post_parent );
		}
	} elseif (
		'attachment' === $post->post_type &&
		! in_array( $post_status, array( 'private', 'trash', 'auto-draft' ), true )
	) {
		/*
		 * Ensure uninherited attachments have a permitted status either 'private', 'trash', 'auto-draft'.
		 * This is to match the logic in wp_insert_post().
		 *
		 * Note: 'inherit' is excluded from this check as it is resolved to the parent post's
		 * status in the logic block above.
		 */
		$post_status = 'publish';
	}

	/**
	 * Filters the post status.
	 *
	 * @since 4.4.0
	 * @since 5.7.0 The attachment post type is now passed through this filter.
	 *
	 * @param string  $post_status The post status.
	 * @param WP_Post $post        The post object.
	 */
	return apply_filters( 'get_post_status', $post_status, $post );
}