Получение статуса поста с помощью функции GET_POST_STATUS()
Функция get_post_status() позволяет узнать статус поста на основе его ID. Если вы используете ID вложения (например, картинки), функция вернёт статус родительского поста.
Использование функции
Эта функция применяется следующим образом:
$status = get_post_status( $post );
Параметры:
$post(int|WP_Post) — ID поста или объект поста. По умолчанию используется глобальный$post.
Возвращаемое значение:
- string | false — статус поста при успешном выполнении, или false в случае ошибки.
Примеры использования
Пример 1: Отображение статуса поста по ID
$status = get_post_status( 121 );
echo $status;
/* Вывод:
'publish' — если пост опубликован.
'draft' — если это черновик и так далее.
*/
Пример 2: Отображение локализованного имени статуса поста
$status = get_post_status( 121 );
echo get_post_status_object( $status )->label; // Опубликован
Пример 3: Получение различных статусов
Функция может возвращать следующие статусы:
- publish
- future
- draft
- pending
- private
- trash
- auto-draft
- inherit
- custom status
Для каждого статуса есть определение, которое можно найти в документации WordPress.
Пример 4: Проверка статуса поста
Код для использования вне основного цикла:
if ( 'private' === get_post_status( $post_id ) ) {
echo 'приватный';
} else {
echo 'публичный';
}
Структура функции get_post_status()
Вот как выглядит базовая структура функции:
function get_post_status( $post = null ) {
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
) {
$post_status = 'publish';
} elseif ( 'trash' === get_post_status( $post->post_parent ) ) {
$post_status = get_post_meta( $post->post_parent, '_wp_trash_meta_status', true );
if ( ! $post_status ) {
$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 )
) {
$post_status = 'publish';
}
return apply_filters( 'get_post_status', $post_status, $post );
}
Заключение
Функция get_post_status() является удобным инструментом для получения статуса постов в WordPress. С её помощью вы можете легко управлять контентом и следить за состоянием ваших постов.