感谢托马斯斯特鲁琴斯基,他完整地解释并回答了我的问题
You Can See The Answer At This Link
第一-解释。
说到管理页面,Wordpress有点棘手。本质上,当加载管理页面时,wp-admin/admin.php 正在包括在内。在这个文件中,有一个对函数的调用auth_redirect() 它检查用户是否已登录,如果未登录,则将其重定向到登录页面。
由于此功能不是典型的操作/过滤器,因此很难禁用它。幸运的是,它自己调用了几个钩子。其中一个,auth_redirect_scheme, 在真正重定向发生之前调用。它旨在为重定向准备一个“方案”(http/https),但我们可以利用它来满足您的目标。
我添加了一个过滤器挂钩auth_redirect_scheme, 优先级为9999(这并不重要,但我希望它运行得晚一些,以防万一)。然后我从原文中提取了一段代码auth_redirect() 用于检查用户是否登录(wp_validate_auth_cookie). 如果他是,我们只返回值,因为什么都不用做。但是,如果用户未登录,我们将显示一个错误页面并退出脚本(以防止发生重定向)。
还有,以防万一我禁用了wp_redirect_admin_locations 滤器我不确定是否需要,但是。。。
现在-代码。记住,这可能不是完美的解决方案,需要您的部分进行一些改进。
<?php
/**
* @packageStop_Redirect
*/
/*
Plugin Name: Stop redirect
Plugin URI:
Description: Stop redirecting anything to wp-login
Author: Tomasz Struczyński
Version: 0.1
Author URI:
*/
add_action(\'init\', \'remove_default_redirect\');
add_filter(\'auth_redirect_scheme\', \'stop_redirect\', 9999);
function stop_redirect($scheme)
{
if ( $user_id = wp_validate_auth_cookie( \'\', $scheme) ) {
return $scheme;
}
global $wp_query;
$wp_query->set_404();
get_template_part( 404 );
exit();
}
function remove_default_redirect()
{
remove_action(\'template_redirect\', \'wp_redirect_admin_locations\', 1000);
}