WordPress Version: 4.6
/**
* Retrieves the URL used for the post preview.
*
* Allows additional query args to be appended.
*
* @since 4.4.0
*
* @param int|WP_Post $post Optional. Post ID or `WP_Post` object. Defaults to global `$post`.
* @param array $query_args Optional. Array of additional query args to be appended to the link.
* Default empty array.
* @param string $preview_link Optional. Base preview link to be used if it should differ from the
* post permalink. Default empty.
* @return string|null URL used for the post preview, or null if the post does not exist.
*/
function get_preview_post_link($post = null, $query_args = array(), $preview_link = '')
{
$post = get_post($post);
if (!$post) {
return;
}
$post_type_object = get_post_type_object($post->post_type);
if (is_post_type_viewable($post_type_object)) {
if (!$preview_link) {
$preview_link = set_url_scheme(get_permalink($post));
}
$query_args['preview'] = 'true';
$preview_link = add_query_arg($query_args, $preview_link);
}
/**
* Filters the URL used for a post preview.
*
* @since 2.0.5
* @since 4.0.0 Added the `$post` parameter.
*
* @param string $preview_link URL used for the post preview.
* @param WP_Post $post Post object.
*/
return apply_filters('preview_post_link', $preview_link, $post);
}