函数文档

wp_get_referer()

💡 云策文档标注

概述

wp_get_referer() 函数用于从 '_wp_http_referer' 查询变量或 HTTP referer 中检索来源 URL。如果来源 URL 与当前请求 URL 相同,则返回 false。

关键要点

  • 函数返回字符串(成功时)或 false(失败时),失败情况包括来源 URL 与当前请求 URL 相同或 wp_validate_redirect() 未定义。
  • HTTP referer 是服务器变量,注意 'referer' 是故意拼写错误的。
  • 函数内部调用 wp_get_raw_referer() 获取未验证的来源,并通过 wp_validate_redirect() 进行验证。
  • 相关函数包括 wp_get_raw_referer()、wp_validate_redirect()、wp_unslash() 和 home_url()。
  • 在 WordPress 核心中广泛使用,例如在 WP_Recovery_Mode、WP_Customize_Manager 和多个管理功能中。

代码示例

if ( wp_get_referer() ) {
	wp_safe_redirect( wp_get_referer() );
} else {
	wp_safe_redirect( get_home_url() );
}

📄 原文内容

Retrieves referer from ‘_wp_http_referer’ or HTTP referer.

Description

If it’s the same as the current request URL, will return false.

Return

string|false Referer URL on success, false on failure.

More Information

HTTP referer is a server variable. ‘referer’ is deliberately misspelled.

If page “refered” (form posted) to itself, returns false (because $_SERVER[‘HTTP_REFERER’] == $_REQUEST[‘_wp_http_referer’])

Source

function wp_get_referer() {
	// Return early if called before wp_validate_redirect() is defined.
	if ( ! function_exists( 'wp_validate_redirect' ) ) {
		return false;
	}

	$ref = wp_get_raw_referer();

	if ( $ref && wp_unslash( $_SERVER['REQUEST_URI'] ) !== $ref
		&& home_url() . wp_unslash( $_SERVER['REQUEST_URI'] ) !== $ref
	) {
		return wp_validate_redirect( $ref, false );
	}

	return false;
}

Changelog

Version Description
2.0.4 Introduced.

User Contributed Notes