Как использовать функцию get_post_status() для получения статуса поста

Получение статуса поста с помощью функции 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. С её помощью вы можете легко управлять контентом и следить за состоянием ваших постов.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *