您的功能说明:
在…上FRONT END 在显示模板之前执行此操作:
    ;如果用户已登录:         ;检查您是否不在管理页上(后端),如果您不在管理页上:              ;,转到管理员
     ;如果用户未登录:         ;重定向到登录,无论发生什么。。。
因此,您可以看到您的方法也有一些漏洞:-)wp_redirect()
医生说:
wp\\U重定向()does not exit 自动和should 几乎总是这样be
followed by exit
你没有,这里的其他人也没有。。。
解决方案
从您所描述的内容来看,您希望在任何地方都做一些事情,无论做什么,为此,您可以想到2个“真正”的一般行动,这些行动对于执行来说是合乎逻辑的:
init
- 自WordPress 1.5开始提供,在WordPress中仍然是最新的4.5, 虽然有很多插件都与之挂钩,但您可以使用add_action(...)
\'s优先级设置为1。。。
set_current_user
自WordPress 2.0.1以来,在WordPress中仍然是最新的
4.5; 医生说:
默认情况下更改用户后运行wp_set_current_user()
作用请注意wp_set_current_user()
也是一个“可插入”功能,意味着插件可以覆盖它(docs link)
在此之后,您可以确定您需要知道的一切:
无论用户是否登录-is_user_logged_in()
无论您是在管理页面上还是在其他地方-is_admin()
当前页面是否wp-login.php
或不是-$GLOBALS[\'pagenow\'] == "wp-login.php"
代码
add_action( \'set_current_user\', function(){
//"After user is set, do ..."
//"If user IS logged in, but is NOT on any admin/backend page
//=> redirect to admin url and !exit current execution!"
if( is_user_logged_in() && ! is_admin() ){
wp_redirect(admin_url());
exit();
}
//"If user is NOT logged in and we are NOT on (default) login page
//=> redirect to login page !and exit current execution!"
if( ! is_user_logged_in() && ($GLOBALS[\'pagenow\'] != "wp-login.php") ){
wp_redirect(wp_login_url());
exit();
}
} );
在WordPress 4.5上进行了测试,在正面和正面都能像您所描述的那样工作&;后端。。。