post_preview

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

WordPress Version: 6.2

/**
 * Saves a draft or manually autosaves for the purpose of showing a post preview.
 *
 * @since 2.7.0
 *
 * @return string URL to redirect to show the preview.
 */
function post_preview()
{
    $post_id = (int) $_POST['post_ID'];
    $_POST['ID'] = $post_id;
    $post = get_post($post_id);
    if (!$post) {
        wp_die(__('Sorry, you are not allowed to edit this post.'));
    }
    if (!current_user_can('edit_post', $post->ID)) {
        wp_die(__('Sorry, you are not allowed to edit this post.'));
    }
    $is_autosave = false;
    if (!wp_check_post_lock($post->ID) && get_current_user_id() == $post->post_author && ('draft' === $post->post_status || 'auto-draft' === $post->post_status)) {
        $saved_post_id = edit_post();
    } else {
        $is_autosave = true;
        if (isset($_POST['post_status']) && 'auto-draft' === $_POST['post_status']) {
            $_POST['post_status'] = 'draft';
        }
        $saved_post_id = wp_create_post_autosave($post->ID);
    }
    if (is_wp_error($saved_post_id)) {
        wp_die($saved_post_id->get_error_message());
    }
    $query_args = array();
    if ($is_autosave && $saved_post_id) {
        $query_args['preview_id'] = $post->ID;
        $query_args['preview_nonce'] = wp_create_nonce('post_preview_' . $post->ID);
        if (isset($_POST['post_format'])) {
            $query_args['post_format'] = empty($_POST['post_format']) ? 'standard' : sanitize_key($_POST['post_format']);
        }
        if (isset($_POST['_thumbnail_id'])) {
            $query_args['_thumbnail_id'] = ((int) $_POST['_thumbnail_id'] <= 0) ? '-1' : (int) $_POST['_thumbnail_id'];
        }
    }
    return get_preview_post_link($post, $query_args);
}

WordPress Version: 5.6

/**
 * Saves a draft or manually autosaves for the purpose of showing a post preview.
 *
 * @since 2.7.0
 *
 * @return string URL to redirect to show the preview.
 */
function post_preview()
{
    $post_ID = (int) $_POST['post_ID'];
    $_POST['ID'] = $post_ID;
    $post = get_post($post_ID);
    if (!$post) {
        wp_die(__('Sorry, you are not allowed to edit this post.'));
    }
    if (!current_user_can('edit_post', $post->ID)) {
        wp_die(__('Sorry, you are not allowed to edit this post.'));
    }
    $is_autosave = false;
    if (!wp_check_post_lock($post->ID) && get_current_user_id() == $post->post_author && ('draft' === $post->post_status || 'auto-draft' === $post->post_status)) {
        $saved_post_id = edit_post();
    } else {
        $is_autosave = true;
        if (isset($_POST['post_status']) && 'auto-draft' === $_POST['post_status']) {
            $_POST['post_status'] = 'draft';
        }
        $saved_post_id = wp_create_post_autosave($post->ID);
    }
    if (is_wp_error($saved_post_id)) {
        wp_die($saved_post_id->get_error_message());
    }
    $query_args = array();
    if ($is_autosave && $saved_post_id) {
        $query_args['preview_id'] = $post->ID;
        $query_args['preview_nonce'] = wp_create_nonce('post_preview_' . $post->ID);
        if (isset($_POST['post_format'])) {
            $query_args['post_format'] = empty($_POST['post_format']) ? 'standard' : sanitize_key($_POST['post_format']);
        }
        if (isset($_POST['_thumbnail_id'])) {
            $query_args['_thumbnail_id'] = ((int) $_POST['_thumbnail_id'] <= 0) ? '-1' : (int) $_POST['_thumbnail_id'];
        }
    }
    return get_preview_post_link($post, $query_args);
}

WordPress Version: 5.5

/**
 * Saves a draft or manually autosaves for the purpose of showing a post preview.
 *
 * @since 2.7.0
 *
 * @return string URL to redirect to show the preview.
 */
function post_preview()
{
    $post_ID = (int) $_POST['post_ID'];
    $_POST['ID'] = $post_ID;
    $post = get_post($post_ID);
    if (!$post) {
        wp_die(__('Sorry, you are not allowed to edit this post.'));
    }
    if (!current_user_can('edit_post', $post->ID)) {
        wp_die(__('Sorry, you are not allowed to edit this post.'));
    }
    $is_autosave = false;
    if (!wp_check_post_lock($post->ID) && get_current_user_id() == $post->post_author && ('draft' === $post->post_status || 'auto-draft' === $post->post_status)) {
        $saved_post_id = edit_post();
    } else {
        $is_autosave = true;
        if (isset($_POST['post_status']) && 'auto-draft' === $_POST['post_status']) {
            $_POST['post_status'] = 'draft';
        }
        $saved_post_id = wp_create_post_autosave($post->ID);
    }
    if (is_wp_error($saved_post_id)) {
        wp_die($saved_post_id->get_error_message());
    }
    $query_args = array();
    if ($is_autosave && $saved_post_id) {
        $query_args['preview_id'] = $post->ID;
        $query_args['preview_nonce'] = wp_create_nonce('post_preview_' . $post->ID);
        if (isset($_POST['post_format'])) {
            $query_args['post_format'] = empty($_POST['post_format']) ? 'standard' : sanitize_key($_POST['post_format']);
        }
        if (isset($_POST['_thumbnail_id'])) {
            $query_args['_thumbnail_id'] = (intval($_POST['_thumbnail_id']) <= 0) ? '-1' : intval($_POST['_thumbnail_id']);
        }
    }
    return get_preview_post_link($post, $query_args);
}

WordPress Version: 5.3

/**
 * Saves a draft or manually autosaves for the purpose of showing a post preview.
 *
 * @since 2.7.0
 *
 * @return string URL to redirect to show the preview.
 */
function post_preview()
{
    $post_ID = (int) $_POST['post_ID'];
    $_POST['ID'] = $post_ID;
    $post = get_post($post_ID);
    if (!$post) {
        wp_die(__('Sorry, you are not allowed to edit this post.'));
    }
    if (!current_user_can('edit_post', $post->ID)) {
        wp_die(__('Sorry, you are not allowed to edit this post.'));
    }
    $is_autosave = false;
    if (!wp_check_post_lock($post->ID) && get_current_user_id() == $post->post_author && ('draft' == $post->post_status || 'auto-draft' == $post->post_status)) {
        $saved_post_id = edit_post();
    } else {
        $is_autosave = true;
        if (isset($_POST['post_status']) && 'auto-draft' == $_POST['post_status']) {
            $_POST['post_status'] = 'draft';
        }
        $saved_post_id = wp_create_post_autosave($post->ID);
    }
    if (is_wp_error($saved_post_id)) {
        wp_die($saved_post_id->get_error_message());
    }
    $query_args = array();
    if ($is_autosave && $saved_post_id) {
        $query_args['preview_id'] = $post->ID;
        $query_args['preview_nonce'] = wp_create_nonce('post_preview_' . $post->ID);
        if (isset($_POST['post_format'])) {
            $query_args['post_format'] = empty($_POST['post_format']) ? 'standard' : sanitize_key($_POST['post_format']);
        }
        if (isset($_POST['_thumbnail_id'])) {
            $query_args['_thumbnail_id'] = (intval($_POST['_thumbnail_id']) <= 0) ? '-1' : intval($_POST['_thumbnail_id']);
        }
    }
    return get_preview_post_link($post, $query_args);
}

WordPress Version: 4.9

/**
 * Saves a draft or manually autosaves for the purpose of showing a post preview.
 *
 * @since 2.7.0
 *
 * @return string URL to redirect to show the preview.
 */
function post_preview()
{
    $post_ID = (int) $_POST['post_ID'];
    $_POST['ID'] = $post_ID;
    if (!$post = get_post($post_ID)) {
        wp_die(__('Sorry, you are not allowed to edit this post.'));
    }
    if (!current_user_can('edit_post', $post->ID)) {
        wp_die(__('Sorry, you are not allowed to edit this post.'));
    }
    $is_autosave = false;
    if (!wp_check_post_lock($post->ID) && get_current_user_id() == $post->post_author && ('draft' == $post->post_status || 'auto-draft' == $post->post_status)) {
        $saved_post_id = edit_post();
    } else {
        $is_autosave = true;
        if (isset($_POST['post_status']) && 'auto-draft' == $_POST['post_status']) {
            $_POST['post_status'] = 'draft';
        }
        $saved_post_id = wp_create_post_autosave($post->ID);
    }
    if (is_wp_error($saved_post_id)) {
        wp_die($saved_post_id->get_error_message());
    }
    $query_args = array();
    if ($is_autosave && $saved_post_id) {
        $query_args['preview_id'] = $post->ID;
        $query_args['preview_nonce'] = wp_create_nonce('post_preview_' . $post->ID);
        if (isset($_POST['post_format'])) {
            $query_args['post_format'] = empty($_POST['post_format']) ? 'standard' : sanitize_key($_POST['post_format']);
        }
        if (isset($_POST['_thumbnail_id'])) {
            $query_args['_thumbnail_id'] = (intval($_POST['_thumbnail_id']) <= 0) ? '-1' : intval($_POST['_thumbnail_id']);
        }
    }
    return get_preview_post_link($post, $query_args);
}

WordPress Version: 4.6

/**
 * Save draft or manually autosave for showing preview.
 *
 * @package WordPress
 * @since 2.7.0
 *
 * @return str URL to redirect to show the preview
 */
function post_preview()
{
    $post_ID = (int) $_POST['post_ID'];
    $_POST['ID'] = $post_ID;
    if (!$post = get_post($post_ID)) {
        wp_die(__('Sorry, you are not allowed to edit this post.'));
    }
    if (!current_user_can('edit_post', $post->ID)) {
        wp_die(__('Sorry, you are not allowed to edit this post.'));
    }
    $is_autosave = false;
    if (!wp_check_post_lock($post->ID) && get_current_user_id() == $post->post_author && ('draft' == $post->post_status || 'auto-draft' == $post->post_status)) {
        $saved_post_id = edit_post();
    } else {
        $is_autosave = true;
        if (isset($_POST['post_status']) && 'auto-draft' == $_POST['post_status']) {
            $_POST['post_status'] = 'draft';
        }
        $saved_post_id = wp_create_post_autosave($post->ID);
    }
    if (is_wp_error($saved_post_id)) {
        wp_die($saved_post_id->get_error_message());
    }
    $query_args = array();
    if ($is_autosave && $saved_post_id) {
        $query_args['preview_id'] = $post->ID;
        $query_args['preview_nonce'] = wp_create_nonce('post_preview_' . $post->ID);
        if (isset($_POST['post_format'])) {
            $query_args['post_format'] = empty($_POST['post_format']) ? 'standard' : sanitize_key($_POST['post_format']);
        }
        if (isset($_POST['_thumbnail_id'])) {
            $query_args['_thumbnail_id'] = (intval($_POST['_thumbnail_id']) <= 0) ? '-1' : intval($_POST['_thumbnail_id']);
        }
    }
    return get_preview_post_link($post, $query_args);
}

WordPress Version: 4.4

/**
 * Save draft or manually autosave for showing preview.
 *
 * @package WordPress
 * @since 2.7.0
 *
 * @return str URL to redirect to show the preview
 */
function post_preview()
{
    $post_ID = (int) $_POST['post_ID'];
    $_POST['ID'] = $post_ID;
    if (!$post = get_post($post_ID)) {
        wp_die(__('You are not allowed to edit this post.'));
    }
    if (!current_user_can('edit_post', $post->ID)) {
        wp_die(__('You are not allowed to edit this post.'));
    }
    $is_autosave = false;
    if (!wp_check_post_lock($post->ID) && get_current_user_id() == $post->post_author && ('draft' == $post->post_status || 'auto-draft' == $post->post_status)) {
        $saved_post_id = edit_post();
    } else {
        $is_autosave = true;
        if (isset($_POST['post_status']) && 'auto-draft' == $_POST['post_status']) {
            $_POST['post_status'] = 'draft';
        }
        $saved_post_id = wp_create_post_autosave($post->ID);
    }
    if (is_wp_error($saved_post_id)) {
        wp_die($saved_post_id->get_error_message());
    }
    $query_args = array();
    if ($is_autosave && $saved_post_id) {
        $query_args['preview_id'] = $post->ID;
        $query_args['preview_nonce'] = wp_create_nonce('post_preview_' . $post->ID);
        if (isset($_POST['post_format'])) {
            $query_args['post_format'] = empty($_POST['post_format']) ? 'standard' : sanitize_key($_POST['post_format']);
        }
    }
    return get_preview_post_link($post, $query_args);
}

WordPress Version: 4.2

/**
 * Save draft or manually autosave for showing preview.
 *
 * @package WordPress
 * @since 2.7.0
 *
 * @return str URL to redirect to show the preview
 */
function post_preview()
{
    $post_ID = (int) $_POST['post_ID'];
    $_POST['ID'] = $post_ID;
    if (!$post = get_post($post_ID)) {
        wp_die(__('You are not allowed to edit this post.'));
    }
    if (!current_user_can('edit_post', $post->ID)) {
        wp_die(__('You are not allowed to edit this post.'));
    }
    $is_autosave = false;
    if (!wp_check_post_lock($post->ID) && get_current_user_id() == $post->post_author && ('draft' == $post->post_status || 'auto-draft' == $post->post_status)) {
        $saved_post_id = edit_post();
    } else {
        $is_autosave = true;
        if (isset($_POST['post_status']) && 'auto-draft' == $_POST['post_status']) {
            $_POST['post_status'] = 'draft';
        }
        $saved_post_id = wp_create_post_autosave($post->ID);
    }
    if (is_wp_error($saved_post_id)) {
        wp_die($saved_post_id->get_error_message());
    }
    $query_args = array('preview' => 'true');
    if ($is_autosave && $saved_post_id) {
        $query_args['preview_id'] = $post->ID;
        $query_args['preview_nonce'] = wp_create_nonce('post_preview_' . $post->ID);
        if (isset($_POST['post_format'])) {
            $query_args['post_format'] = empty($_POST['post_format']) ? 'standard' : sanitize_key($_POST['post_format']);
        }
    }
    $url = add_query_arg($query_args, get_permalink($post->ID));
    /** This filter is documented in wp-admin/includes/meta-boxes.php */
    return apply_filters('preview_post_link', $url, $post);
}

WordPress Version: 4.1

/**
 * Save draft or manually autosave for showing preview.
 *
 * @package WordPress
 * @since 2.7.0
 *
 * @return str URL to redirect to show the preview
 */
function post_preview()
{
    $post_ID = (int) $_POST['post_ID'];
    $_POST['ID'] = $post_ID;
    if (!$post = get_post($post_ID)) {
        wp_die(__('You are not allowed to edit this post.'));
    }
    if (!current_user_can('edit_post', $post->ID)) {
        wp_die(__('You are not allowed to edit this post.'));
    }
    $is_autosave = false;
    if (!wp_check_post_lock($post->ID) && get_current_user_id() == $post->post_author && ('draft' == $post->post_status || 'auto-draft' == $post->post_status)) {
        $saved_post_id = edit_post();
    } else {
        $is_autosave = true;
        if ('auto-draft' == $_POST['post_status']) {
            $_POST['post_status'] = 'draft';
        }
        $saved_post_id = wp_create_post_autosave($post->ID);
    }
    if (is_wp_error($saved_post_id)) {
        wp_die($saved_post_id->get_error_message());
    }
    $query_args = array('preview' => 'true');
    if ($is_autosave && $saved_post_id) {
        $query_args['preview_id'] = $post->ID;
        $query_args['preview_nonce'] = wp_create_nonce('post_preview_' . $post->ID);
        if (isset($_POST['post_format'])) {
            $query_args['post_format'] = empty($_POST['post_format']) ? 'standard' : sanitize_key($_POST['post_format']);
        }
    }
    $url = add_query_arg($query_args, get_permalink($post->ID));
    /** This filter is documented in wp-admin/includes/meta-boxes.php */
    return apply_filters('preview_post_link', $url, $post);
}

WordPress Version: 4.0

/**
 * Save draft or manually autosave for showing preview.
 *
 * @package WordPress
 * @since 2.7.0
 *
 * @uses get_post_status()
 * @uses edit_post()
 * @uses get_post()
 * @uses current_user_can()
 * @uses wp_die()
 * @uses wp_create_post_autosave()
 * @uses add_query_arg()
 * @uses wp_create_nonce()
 *
 * @return str URL to redirect to show the preview
 */
function post_preview()
{
    $post_ID = (int) $_POST['post_ID'];
    $_POST['ID'] = $post_ID;
    if (!$post = get_post($post_ID)) {
        wp_die(__('You are not allowed to edit this post.'));
    }
    if (!current_user_can('edit_post', $post->ID)) {
        wp_die(__('You are not allowed to edit this post.'));
    }
    $is_autosave = false;
    if (!wp_check_post_lock($post->ID) && get_current_user_id() == $post->post_author && ('draft' == $post->post_status || 'auto-draft' == $post->post_status)) {
        $saved_post_id = edit_post();
    } else {
        $is_autosave = true;
        if ('auto-draft' == $_POST['post_status']) {
            $_POST['post_status'] = 'draft';
        }
        $saved_post_id = wp_create_post_autosave($post->ID);
    }
    if (is_wp_error($saved_post_id)) {
        wp_die($saved_post_id->get_error_message());
    }
    $query_args = array('preview' => 'true');
    if ($is_autosave && $saved_post_id) {
        $query_args['preview_id'] = $post->ID;
        $query_args['preview_nonce'] = wp_create_nonce('post_preview_' . $post->ID);
        if (isset($_POST['post_format'])) {
            $query_args['post_format'] = empty($_POST['post_format']) ? 'standard' : sanitize_key($_POST['post_format']);
        }
    }
    $url = add_query_arg($query_args, get_permalink($post->ID));
    /** This filter is documented in wp-admin/includes/meta-boxes.php */
    return apply_filters('preview_post_link', $url, $post);
}

WordPress Version: 3.9

/**
 * Save draft or manually autosave for showing preview.
 *
 * @package WordPress
 * @since 2.7.0
 *
 * @uses get_post_status()
 * @uses edit_post()
 * @uses get_post()
 * @uses current_user_can()
 * @uses wp_die()
 * @uses wp_create_post_autosave()
 * @uses add_query_arg()
 * @uses wp_create_nonce()
 *
 * @return str URL to redirect to show the preview
 */
function post_preview()
{
    $post_ID = (int) $_POST['post_ID'];
    $_POST['ID'] = $post_ID;
    if (!$post = get_post($post_ID)) {
        wp_die(__('You are not allowed to edit this post.'));
    }
    if (!current_user_can('edit_post', $post->ID)) {
        wp_die(__('You are not allowed to edit this post.'));
    }
    $is_autosave = false;
    if (!wp_check_post_lock($post->ID) && get_current_user_id() == $post->post_author && ('draft' == $post->post_status || 'auto-draft' == $post->post_status)) {
        $saved_post_id = edit_post();
    } else {
        $is_autosave = true;
        if ('auto-draft' == $_POST['post_status']) {
            $_POST['post_status'] = 'draft';
        }
        $saved_post_id = wp_create_post_autosave($post->ID);
    }
    if (is_wp_error($saved_post_id)) {
        wp_die($saved_post_id->get_error_message());
    }
    $query_args = array('preview' => 'true');
    if ($is_autosave && $saved_post_id) {
        $query_args['preview_id'] = $post->ID;
        $query_args['preview_nonce'] = wp_create_nonce('post_preview_' . $post->ID);
        if (isset($_POST['post_format'])) {
            $query_args['post_format'] = empty($_POST['post_format']) ? 'standard' : sanitize_key($_POST['post_format']);
        }
    }
    $url = add_query_arg($query_args, get_permalink($post->ID));
    /** This filter is documented in wp-admin/includes/meta-boxes.php */
    return apply_filters('preview_post_link', $url);
}

WordPress Version: 3.7

/**
 * Save draft or manually autosave for showing preview.
 *
 * @package WordPress
 * @since 2.7.0
 *
 * @uses get_post_status()
 * @uses edit_post()
 * @uses get_post()
 * @uses current_user_can()
 * @uses wp_die()
 * @uses wp_create_post_autosave()
 * @uses add_query_arg()
 * @uses wp_create_nonce()
 *
 * @return str URL to redirect to show the preview
 */
function post_preview()
{
    $post_ID = (int) $_POST['post_ID'];
    $status = get_post_status($post_ID);
    if ('auto-draft' == $status) {
        wp_die(__('Preview not available. Please save as a draft first.'));
    }
    if (isset($_POST['catslist'])) {
        $_POST['post_category'] = explode(",", $_POST['catslist']);
    }
    if (isset($_POST['tags_input'])) {
        $_POST['tags_input'] = explode(",", $_POST['tags_input']);
    }
    if ($_POST['post_type'] == 'page' || empty($_POST['post_category'])) {
        unset($_POST['post_category']);
    }
    $_POST['ID'] = $post_ID;
    $post = get_post($post_ID);
    if ('page' == $post->post_type) {
        if (!current_user_can('edit_page', $post_ID)) {
            wp_die(__('You are not allowed to edit this page.'));
        }
    } else if (!current_user_can('edit_post', $post_ID)) {
        wp_die(__('You are not allowed to edit this post.'));
    }
    $user_id = get_current_user_id();
    $locked = wp_check_post_lock($post->ID);
    if (!$locked && 'draft' == $post->post_status && $user_id == $post->post_author) {
        $id = edit_post();
    } else {
        // Non drafts are not overwritten. The autosave is stored in a special post revision.
        $id = wp_create_post_autosave($post->ID);
        if (!is_wp_error($id)) {
            $id = $post->ID;
        }
    }
    if (is_wp_error($id)) {
        wp_die($id->get_error_message());
    }
    if (!$locked && $_POST['post_status'] == 'draft' && $user_id == $post->post_author) {
        $url = add_query_arg('preview', 'true', get_permalink($id));
    } else {
        $nonce = wp_create_nonce('post_preview_' . $id);
        $args = array('preview' => 'true', 'preview_id' => $id, 'preview_nonce' => $nonce);
        if (isset($_POST['post_format'])) {
            $args['post_format'] = empty($_POST['post_format']) ? 'standard' : sanitize_key($_POST['post_format']);
        }
        $url = add_query_arg($args, get_permalink($id));
    }
    return apply_filters('preview_post_link', $url);
}