is_post_status_viewable

The timeline below displays how wordpress function is_post_status_viewable has changed across different WordPress versions. If a version is not listed, refer to the next available version below.

WordPress Version: 6.1

/**
 * Determines whether a post status is considered "viewable".
 *
 * For built-in post statuses such as publish and private, the 'public' value will be evaluated.
 * For all others, the 'publicly_queryable' value will be used.
 *
 * @since 5.7.0
 * @since 5.9.0 Added `is_post_status_viewable` hook to filter the result.
 *
 * @param string|stdClass $post_status Post status name or object.
 * @return bool Whether the post status should be considered viewable.
 */
function is_post_status_viewable($post_status)
{
    if (is_scalar($post_status)) {
        $post_status = get_post_status_object($post_status);
        if (!$post_status) {
            return false;
        }
    }
    if (!is_object($post_status) || $post_status->internal || $post_status->protected) {
        return false;
    }
    $is_viewable = $post_status->publicly_queryable || $post_status->_builtin && $post_status->public;
    /**
     * Filters whether a post status is considered "viewable".
     *
     * The returned filtered value must be a boolean type to ensure
     * `is_post_status_viewable()` only returns a boolean. This strictness
     * is by design to maintain backwards-compatibility and guard against
     * potential type errors in PHP 8.1+. Non-boolean values (even falsey
     * and truthy values) will result in the function returning false.
     *
     * @since 5.9.0
     *
     * @param bool     $is_viewable Whether the post status is "viewable" (strict type).
     * @param stdClass $post_status Post status object.
     */
    return true === apply_filters('is_post_status_viewable', $is_viewable, $post_status);
}

WordPress Version: 5.9

/**
 * Determine whether a post status is considered "viewable".
 *
 * For built-in post statuses such as publish and private, the 'public' value will be evaluted.
 * For all others, the 'publicly_queryable' value will be used.
 *
 * @since 5.7.0
 * @since 5.9.0 Added `is_post_status_viewable` hook to filter the result.
 *
 * @param string|stdClass $post_status Post status name or object.
 * @return bool Whether the post status should be considered viewable.
 */
function is_post_status_viewable($post_status)
{
    if (is_scalar($post_status)) {
        $post_status = get_post_status_object($post_status);
        if (!$post_status) {
            return false;
        }
    }
    if (!is_object($post_status) || $post_status->internal || $post_status->protected) {
        return false;
    }
    $is_viewable = $post_status->publicly_queryable || $post_status->_builtin && $post_status->public;
    /**
     * Filters whether a post status is considered "viewable".
     *
     * The returned filtered value must be a boolean type to ensure
     * `is_post_status_viewable()` only returns a boolean. This strictness
     * is by design to maintain backwards-compatibility and guard against
     * potential type errors in PHP 8.1+. Non-boolean values (even falsey
     * and truthy values) will result in the function returning false.
     *
     * @since 5.9.0
     *
     * @param bool     $is_viewable Whether the post status is "viewable" (strict type).
     * @param stdClass $post_status Post status object.
     */
    return true === apply_filters('is_post_status_viewable', $is_viewable, $post_status);
}

WordPress Version: 5.7

/**
 * Determine whether a post status is considered "viewable".
 *
 * For built-in post statuses such as publish and private, the 'public' value will be evaluted.
 * For all others, the 'publicly_queryable' value will be used.
 *
 * @since 5.7.0
 *
 * @param string|stdClass $post_status Post status name or object.
 * @return bool Whether the post status should be considered viewable.
 */
function is_post_status_viewable($post_status)
{
    if (is_scalar($post_status)) {
        $post_status = get_post_status_object($post_status);
        if (!$post_status) {
            return false;
        }
    }
    if (!is_object($post_status) || $post_status->internal || $post_status->protected) {
        return false;
    }
    return $post_status->publicly_queryable || $post_status->_builtin && $post_status->public;
}

WordPress Version: .22

/**
 * Determines whether a post status is considered "viewable".
 *
 * For built-in post statuses such as publish and private, the 'public' value will be evaluated.
 * For all others, the 'publicly_queryable' value will be used.
 *
 * @since 5.7.0
 * @since 5.9.0 Added `is_post_status_viewable` hook to filter the result.
 *
 * @param string|stdClass $post_status Post status name or object.
 * @return bool Whether the post status should be considered viewable.
 */
function is_post_status_viewable($post_status)
{
    if (is_scalar($post_status)) {
        $post_status = get_post_status_object($post_status);
        if (!$post_status) {
            return false;
        }
    }
    if (!is_object($post_status) || $post_status->internal || $post_status->protected) {
        return false;
    }
    $is_viewable = $post_status->publicly_queryable || $post_status->_builtin && $post_status->public;
    /**
     * Filters whether a post status is considered "viewable".
     *
     * The returned filtered value must be a boolean type to ensure
     * `is_post_status_viewable()` only returns a boolean. This strictness
     * is by design to maintain backwards-compatibility and guard against
     * potential type errors in PHP 8.1+. Non-boolean values (even falsey
     * and truthy values) will result in the function returning false.
     *
     * @since 5.9.0
     *
     * @param bool     $is_viewable Whether the post status is "viewable" (strict type).
     * @param stdClass $post_status Post status object.
     */
    return true === apply_filters('is_post_status_viewable', $is_viewable, $post_status);
}