如何使用wp_logout注销用户?

时间:2015-05-01 作者:EML

我可以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()

2 个回复
SO网友:Vasim Shaikh

如果您正在使用wp_logout 在您自己的代码中,最好exitwp_redirect 之后立即。

你可以打电话wp_set_current_user(0) 之后wp_logout() 如果您需要继续执行PHP但不希望用户登录,请立即手动注销用户。

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()

结束

相关推荐

Wp_logout_url($reDirect)不会注销和重定向()

即使我从wp docs<a href=\"<?php echo wp_logout_url( get_permalink() ); ?>\" title=\"Logout\">Logout</a> 这是用户单击时的输出:Warning: Cannot modify header information - headers already sent by (output started at /usr/home/nakashitabcn.com/web/pedi