我可以wp_logout
工作,但必须生成大量警告(“PHP警告:无法修改标题信息-标题已发送”)。
wp_logout
呼叫wp_clear_auth_cookie
, 哪个呼叫setcookie
, Cookie必须与HTTP头一起使用。我在打电话wp_logout
在页面内部(页眉或页脚),因此出现了问题。
那么,我究竟应该如何以编程方式将用户注销呢?我可以这样做来响应ajax请求,但这似乎有点过头了。谢谢
编辑
当前代码如下:
add_action(\'wp_footer\', \'fp_onload_php2\');
function fp_onload_php2() {
$slug = basename(get_permalink());
if($slug != \'club-login\')
return;
$jsmsg = \'\';
$loggedin = false;
if(is_user_logged_in()) {
$current_user = wp_get_current_user();
$loggedin = $current_user->has_cap(\'customer\');
}
if($loggedin && isset($_GET[\'logout\'])) {
wp_logout();
$jsmsg = \'You have been logged out.\';
$loggedin = false;
} else if(!$loggedin && isset($_GET[\'logout\']))
$jsmsg = "You are not logged in.";
if(!$loggedin)
echo
"<script type=\'text/javascript\'> fp_onload_js2(0, \'" . $jsmsg .
"\'); </script>\\n";
else
echo
"<script type=\'text/javascript\'> fp_onload_js2(1, \'" . $jsmsg .
"\'); </script>\\n";
} // fp_onload_php2()
SO网友:EML
这不太好,但似乎有效。这可不像打电话那么简单wp_logout
在发送任何内容之前,因为在加载页面其余部分之前,用户可能会注销,也可能不会注销(我不理解这一点)。在我的例子中,页面内容取决于用户是否实际登录(菜单会更改,并且会调用一些JS代码以不同方式显示内容)。
对于这段代码,注销请求重定向到登录页面,GET参数为logout=1
. 这在登录页面上进行测试,然后调用wp_logout
, 并使用GET参数重定向回登录页面logout=0
, 强制刷新。
add_action(\'init\', \'check_logout\');
function check_logout() {
if(!isset($_GET[\'logout\']) || ($_GET[\'logout\'] != \'1\'))
return;
// get_permalink() and $post are not available here, so:
$path = parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH);
if($path != "/login/")
return;
if(is_user_logged_in()) {
wp_logout();
header("Location: http://fubar.com/login/?logout=0");
exit();
}
} // check_logout()