我面临着完全相同的问题。谷歌不是很有帮助,所以我需要深入研究。:)
在wp-includes/template-loader.php文件的顶部,您可以找到以下代码片段:
if ( defined('WP_USE_THEMES') && WP_USE_THEMES )
do_action('template_redirect');
如果您检查当时与该操作挂钩的函数,您会发现对wp_redirect_admin_locations函数的引用(钩子和函数都在/wp-includes/canonical.php文件中声明 - 第 526 行)。
在wp_redirect_admin_locations函数中,您会发现:
$logins = array(
home_url( 'wp-login.php', 'relative' ),
home_url( 'login', 'relative' ),
site_url( 'login', 'relative' ),
);
if ( in_array( untrailingslashit( $_SERVER['REQUEST_URI'] ), $logins ) ) {
wp_redirect( site_url( 'wp-login.php', 'login' ) );
exit;
}
该问题的一个简单解决方案是将您的功能挂钩到 *wp_redirect* 过滤器。像这样的东西(在你的functions.php中):
add_filter('wp_redirect', 'yourprefix_filter_login_redirect', 10, 2);
function yourprefix_filter_login_redirect($location, $status)
{
$uri = trim($_SERVER['REQUEST_URI'], '/');
if ($uri === 'login') {
return false;
}
return $location;
}
所以... *wp_redirect_admin_locations*在尝试执行重定向后终止脚本,因此上述解决方案将不起作用。
我现在看到的唯一其他解决方案是一起绕过该功能,这很糟糕。该函数中定义的所有其他重定向将一起丢失...
无论如何,我最终使用的是:
add_action(
'init',
function() {
remove_action('template_redirect', 'wp_redirect_admin_locations', 1000);
}
);