WP_REDIRECT在标题中不起作用,退出正在中断页面

时间:2011-09-28 作者:Dains

很抱歉问这么一个基本的问题,我已经看了其他问题,没有找到答案。我已经定制了一些公共页面,它们有自己的标题public。我正在页面的开头(header.php中的第1行)对所有其他页面进行基本的登录检查。其目的是将未标记的用户重定向到接收页面,在那里他们可以获得帮助、登录等。

只是a)它不会重定向,b)添加“退出;”按照建议,也会打断页面的其余部分。我尝试将其抽象为函数中的函数。php和它破坏了函数。php,所以现在Idunnowhatsgoingon。

代码如下:

if (is_user_logged_in())
{
echo \'loggedin\';
}
else
{
echo network_home_url( \'/receptionist\' );
wp_redirect( network_home_url( \'/receptionist\' ) );
exit;
}
健全性检查工作正常,响应“network\\u home\\u url”也工作正常-我可以复制并粘贴url,这会使页面运行良好。

有人对此有什么建议吗?当然,在我看来它应该可以工作:\\

编辑:根据Hansy的回答和我的回答,这是当前的代码。退出会被注释,因为它会破坏页面,我会在重定向工作时取消注释。

if (is_user_logged_in()){
die(); // edit - don\'t do this per Hansy\'s response, I misread what it does. My bad.
}
else {
wp_redirect( network_home_url( \'/receptionist\' ) ); 
/* exit; */
}
我也尝试过:if(!is\\u user\\u logged\\u in()){wp\\u redirect(network\\u home\\u url(“/前台”);/*exit;*/},因为这会在重定向之前尽可能多地消除。

我开始觉得这个主题有些不确定,因为这应该行得通。

编辑2:我的服务器有一个安全包,PHP安全模式已打开。PHP配置中是否有任何内容会影响此功能?

编辑3:这是主题。我切换回2011年,重新设置,效果很好。以Charles Babbage的名义,主题开发人员可以做些什么来打破核心模板标签?他们不再在学校里教授演示、逻辑和数据的分离了吗?天啊。以下是有效的代码,供参考。我也会试试Hansy的升级版解决方案。

if (!is_user_logged_in() )
{
wp_redirect( network_home_url( \'/receptionist\' ) );
exit;
}

1 个回复
最合适的回答,由SO网友:hacksy 整理而成

wp_redirect 发送标头,以便在重定向失败之前回显任何内容。因此,在这种情况下,您可以删除echo network_home_url( \'/receptionist\' ); 如果没有任何输出被发送,它将正常工作。

更新:在这两种情况下,问题都是您执行无限重定向(如果未登录,则重定向到该url),并且对退出进行注释也没有帮助,同样在第一种情况下,当使用die()时,您会为所有登录的用户终止页面,而不是使用类似的方法(添加了检查,如果我们是admin,则用户可以登录注册)

global $pagenow;
if ( !preg_match("!wp-admin!",$_SERVER["REQUEST_URI"] ) and !in_array( $pagenow, array( \'wp-login.php\', \'wp-register.php\' ) ) ){
    $scheme = is_ssl() && !is_admin() ? \'https\' : \'http\';
    $current_url=$scheme . \'://\'.$_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"];
    $network_url=network_home_url( \'/receptionist\' );
    if (!is_user_logged_in() and $current_url!=$network_url){ 
        wp_redirect( $network_url );  exit;  
    } 
}

结束

相关推荐