函数文档

get_preview_post_link()

💡 云策文档标注

概述

get_preview_post_link() 函数用于获取文章预览的 URL,支持附加查询参数和自定义基础链接。它基于文章对象生成预览链接,并可通过过滤器进行修改。

关键要点

  • 函数返回文章预览的 URL,若文章不存在则返回 null。
  • 接受三个参数:$post(文章 ID 或 WP_Post 对象,默认 null)、$query_args(附加查询参数数组,默认空数组)、$preview_link(自定义基础预览链接,默认空)。
  • 内部使用 get_post() 获取文章对象,检查文章类型是否可查看,并添加 preview=true 参数。
  • 提供 'preview_post_link' 过滤器,允许开发者修改预览链接。
  • 相关函数包括 is_post_type_viewable()、set_url_scheme()、add_query_arg() 等。

代码示例

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 );
}

注意事项

  • 函数自 WordPress 4.4.0 版本引入。
  • 在调用前需确保文章对象有效,否则可能返回 null。
  • 使用 'preview_post_link' 过滤器时,注意参数顺序和类型。

📄 原文内容

Retrieves the URL used for the post preview.

Description

Allows additional query args to be appended.

Parameters

$postint|WP_Postoptional
Post ID or WP_Post object. Defaults to global $post.

Default:null

$query_argsarrayoptional
Array of additional query args to be appended to the link.

Default:array()

$preview_linkstringoptional
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.

Source

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 );
}

Hooks

apply_filters( ‘preview_post_link’, string $preview_link, WP_Post $post )

Filters the URL used for a post preview.

Changelog

Version Description
4.4.0 Introduced.