我正在尝试使用auth_redirect
在访问特定页面时自动重定向未登录的访问者。以下是我使用的代码:
add_action(\'template_redirect\',\'wpse16975_check_if_logged_in\');
function wpse16975_check_if_logged_in(){
$pageid = 29;
if(is_page($pageid)) auth_redirect();
}
重定向工作正常(我看到了登录页面),但当我登录时,我又看到了登录页面。无法访问受保护的页面,因为浏览器不断将其重定向到登录页面。
我看到了this question and its answer 从@chrisguitarguy并将我的代码修改为:
add_action(\'template_redirect\',\'wpse16975_check_if_logged_in\');
function wpse16975_check_if_logged_in(){
$pageid = 29;
if(!is_user_logged_in() && is_page($pageid)) {
$url = add_query_arg(
\'redirect_to\',
get_permalink($pageid),
site_url(\'wp-login.php\')
);
wp_redirect($url);
exit;
}
这段代码解决了我的问题:登录用户现在可以访问该页面。问题是:为什么不能简单地使用
auth_redirect
?
最合适的回答,由SO网友:Fabien Quatravaux 整理而成
问题是此函数通常在后端使用。要在前端使用它,需要添加以下过滤器:
add_filter( \'auth_redirect_scheme\', \'wpse16975_check_loggedin\' );
function wpse16975_check_loggedin(){
return \'logged_in\';
}
那么
auth_redirect()
将按预期工作:如果用户未登录,请将其重定向到登录表单。
SO网友:RyanPaul.ca
仅在移动设备上使用auth\\u redirect()时出现问题。
四天后,我编写了一个有效的解决方案,不需要auth\\u重定向。
global $wp;
$current_url = add_query_arg( $wp->query_string, \'\', home_url( $wp->request ) );
if( !is_user_logged_in() ) { wp_redirect( home_url() . \'/wp-login.php?redirect_to=\'. $current_url );