函数文档

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:

  1. $_GET[‘ref’]
  2. $_POST[‘ref’]
  3. $_SERVER[‘HTTP_REFERER’]
  4. $_GET[‘redirect’]
  5. $_POST[‘redirect’]
  6. $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.