私はwp_logout
を動作させることができますが、たくさんの警告を出さずには動作しません( 'PHPの警告:ヘッダ情報は変更できません - ヘッダはすでに送信されています')。
wp_logout
はwp_clear_auth_cookie
を呼び出し、これはsetcookie
を呼び出します。クッキーは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()
自分のコードでwp_logout
を使用している場合は、その直後におそらくexit
またはwp_redirect
を使用することをお勧めします。
PHPを実行し続ける必要があるがユーザーをログインさせたくない場合は、wp_set_current_user(0)
の後にwp_logout()
を呼び出してユーザーを即座に手動でログアウトさせることができます。
これは素晴らしいことではありませんが、うまくいくようです。コンテンツが送信される前にwp_logout
を呼び出すのと同じくらい簡単ではありません。なぜなら、残りのページがロードされる前にユーザーがログアウトされているかもしれないし、そうでないかもしれないからです。私の場合、ページの内容は、ユーザーが実際にログインしているかどうかによって異なります(メニューが変わり、内容の表示方法が異なるJSコードが呼び出されます)。
このコードでは、ログアウト要求はログインページにリダイレクトされ、GETパラメータはlogout=1
です。これはログインページでテストされ、次にwp_logout
が呼び出され、更新を強制するためにlogout=0
のGETパラメータでログインページにリダイレクトされます。
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()