ユーザーが特にWebサイトからログアウトするときに、永続的なログインを制御するために設定されているCookieを削除しようとしています。
私はそれが同じくらい簡単だろうと思いました:
function remove_user_cookie() {
unset($_COOKIE['woai']);
unset($_COOKIE['woak']);
}
add_action('wp_logout', 'remove_user_cookie');
私も試してみました:
function remove_user_cookie() {
if( $_GET['action'] == 'logout' ) :
unset($_COOKIE['woai']);
unset($_COOKIE['woak']);
endif;
}
add_action('wp_logout', 'remove_user_cookie');
ただし、ユーザーのCookieはそのまま残り、自動的に再度ログインします。
Wp_logoutアクションが正しく機能しないのか、それともユーザーを自動的にログインさせる私のコードと衝突するのかはわかりません。
今、私はこれをheader.phpに書いています:
<?php if( !is_user_logged_in() ) :
// check if user has cookies
if ( isset($_COOKIE['woai']) && isset($_COOKIE['woak']) ) :
$args = array(
'meta_key' => 'login_key',
'meta_value' => $_COOKIE['woak'],
'meta_compare' => '=',
'fields' => 'ID',
'include' => $_COOKIE['woai']
);
$user_query = new WP_User_Query($args);
if( $user_query->results[0] != '' || $user_query->results[0] != NULL ) :
// get user id and login name
$user_id = $user_query->results[0];
$user_login = get_user_by( 'id', $user_id );
// log the user in
wp_set_current_user( $user_id, $user_login->user_login );
wp_set_auth_cookie( $user_id );
do_action( 'wp_login', $user_login->user_login );
endif;
endif; // end if cookies
endif; ?>
そしてユーザーがログインすると、彼らはこれで設定された新しいキーを取得します。
function set_user_cookie($user_login) {
// if they have cookies, delete them
if ( isset($_COOKIE['woai']) && isset($_COOKIE['woak']) ) :
unset($_COOKIE['woai']);
unset($_COOKIE['woak']);
endif;
$user_id = get_user_by( 'login', $user_login );
// generate new key for user
$salt = wp_generate_password(20); // 20 character "random" string
$key = sha1($salt . $email . uniqid(time(), true));
// set new cookies
setcookie("woai", $user_id->ID, time()+31536000); /* expire in 1 year */
setcookie("woak", $key, time()+31536000); /* expire in 1 year */
// update the db
update_field('field_53c3de9cd031e', $key, 'user_'.$user_id->ID.'');
}
add_action('wp_login', 'set_user_cookie', 10, 1);
以下のコードを試してください
function remove_user_cookie() {
setcookie("woak");
setcookie("woai");
}
add_action('wp_logout', 'remove_user_cookie');
なぜあなたはいくつかの値を保存するためにクッキーを使用しますか?セッションを使用することをお勧めします
(私は私のクライアントのための永続的なログイン、2つのワードプレスベースのサイトのためのprestashopと3つのカスタムphpアプリケーションのログインを作成しました)私は同じ挑戦をしました、しかし、これは私がそれを解決した方法です。
最初の一歩
add_action('wp_logout', 'doMyLogoutCall');
add_action('init', 'runInitLogoutProcess');
第二段階
function doMyLogoutCall()
{?>
<img style="display:none" src="<?php echo home_url();
?>?loadwordpressbyimage=1">
<?php
}
function runInitLogoutProcess()
{
// check if wordpress action is set to logout and clear cookie
if (isset($_GET)) {
if (isset($_GET['action'])) {
if ($_GET['action'] == 'logout') {
setcookie('woai', '', time() - 3600, COOKIEPATH, COOKIE_DOMAIN, false);
setcookie('woak', '', time() - 3600, COOKIEPATH, COOKIE_DOMAIN, false);
}
}
// check if your wp_logout hook is called and do the same.
if (isset($_GET['loadwordpressbyimage'])) {
if ($_GET['loadwordpressbyimage'] == 1) {
setcookie('woak', '', time() - 3600, COOKIEPATH, COOKIE_DOMAIN, false);
setcookie('woai', '', time() - 3600, COOKIEPATH, COOKIE_DOMAIN, false);
}
}
}
//それでおしまい。