wpmu_admin_do_redirect()
云策文档标注
概述
wpmu_admin_do_redirect() 是一个已弃用的 WordPress 函数,用于基于 $_GET 或 $_POST 参数重定向用户。它优先处理 'ref' 参数,然后检查 HTTP_REFERER,最后处理 'redirect' 参数,并添加 'updated=true' 参数到 URL。
关键要点
- 函数已弃用,自 WordPress 3.3.0 起建议使用 wp_redirect() 替代。
- 重定向逻辑按顺序检查:$_GET['ref']、$_POST['ref']、$_SERVER['HTTP_REFERER']、$_GET['redirect']、$_POST['redirect'],最后是 $url 参数。
- 如果 $_GET 和 $_POST 中的 'ref' 或 'redirect' 参数不匹配,会触发 wp_die() 显示错误消息。
- 使用 wpmu_admin_redirect_add_updated_param() 函数为 URL 添加 'updated=true' 参数。
代码示例
function wpmu_admin_do_redirect( $url = '' ) {
_deprecated_function( __FUNCTION__, '3.3.0', 'wp_redirect()' );
$ref = '';
if ( isset( $_GET['ref'] ) && isset( $_POST['ref'] ) && $_GET['ref'] !== $_POST['ref'] ) {
wp_die( __( 'A variable mismatch has been detected.' ), __( 'Sorry, you are not allowed to view this item.' ), 400 );
} elseif ( isset( $_POST['ref'] ) ) {
$ref = $_POST['ref'];
} elseif ( isset( $_GET['ref'] ) ) {
$ref = $_GET['ref'];
}
if ( $ref ) {
$ref = wpmu_admin_redirect_add_updated_param( $ref );
wp_redirect( $ref );
exit;
}
if ( ! empty( $_SERVER['HTTP_REFERER'] ) ) {
wp_redirect( $_SERVER['HTTP_REFERER'] );
exit;
}
$url = wpmu_admin_redirect_add_updated_param( $url );
if ( isset( $_GET['redirect'] ) && isset( $_POST['redirect'] ) && $_GET['redirect'] !== $_POST['redirect'] ) {
wp_die( __( 'A variable mismatch has been detected.' ), __( 'Sorry, you are not allowed to view this item.' ), 400 );
} elseif ( isset( $_GET['redirect'] ) ) {
if ( str_starts_with( $_GET['redirect'], 's_' ) )
$url .= '&action;=blogs&s;='. esc_html( substr( $_GET['redirect'], 2 ) );
} elseif ( isset( $_POST['redirect'] ) ) {
$url = wpmu_admin_redirect_add_updated_param( $_POST['redirect'] );
}
wp_redirect( $url );
exit;
}注意事项
- 此函数已弃用,不应在新代码中使用,以避免兼容性问题。
- 重定向后使用 exit 确保脚本终止,防止后续代码执行。
- 参数处理涉及安全检查和转义,如使用 esc_html() 防止 XSS 攻击。
原文内容
Redirect a user based on $_GET or $_POST arguments.
Description
The function looks for redirect arguments in the following order:
- $_GET[‘ref’]
- $_POST[‘ref’]
- $_SERVER[‘HTTP_REFERER’]
- $_GET[‘redirect’]
- $_POST[‘redirect’]
- $url
See also
Parameters
$urlstringoptional-
Redirect URL. Default empty.
Source
function wpmu_admin_do_redirect( $url = '' ) {
_deprecated_function( __FUNCTION__, '3.3.0', 'wp_redirect()' );
$ref = '';
if ( isset( $_GET['ref'] ) && isset( $_POST['ref'] ) && $_GET['ref'] !== $_POST['ref'] ) {
wp_die( __( 'A variable mismatch has been detected.' ), __( 'Sorry, you are not allowed to view this item.' ), 400 );
} elseif ( isset( $_POST['ref'] ) ) {
$ref = $_POST['ref'];
} elseif ( isset( $_GET['ref'] ) ) {
$ref = $_GET['ref'];
}
if ( $ref ) {
$ref = wpmu_admin_redirect_add_updated_param( $ref );
wp_redirect( $ref );
exit;
}
if ( ! empty( $_SERVER['HTTP_REFERER'] ) ) {
wp_redirect( $_SERVER['HTTP_REFERER'] );
exit;
}
$url = wpmu_admin_redirect_add_updated_param( $url );
if ( isset( $_GET['redirect'] ) && isset( $_POST['redirect'] ) && $_GET['redirect'] !== $_POST['redirect'] ) {
wp_die( __( 'A variable mismatch has been detected.' ), __( 'Sorry, you are not allowed to view this item.' ), 400 );
} elseif ( isset( $_GET['redirect'] ) ) {
if ( str_starts_with( $_GET['redirect'], 's_' ) )
$url .= '&action;=blogs&s;='. esc_html( substr( $_GET['redirect'], 2 ) );
} elseif ( isset( $_POST['redirect'] ) ) {
$url = wpmu_admin_redirect_add_updated_param( $_POST['redirect'] );
}
wp_redirect( $url );
exit;
}
Changelog
| Version | Description |
|---|---|
| 3.3.0 | Deprecated. Use wp_redirect() |
| MU (3.0.0) | Introduced. |