2026年5月20日

2026年5月20日

WordPressの自動ログアウト時間を変更する方法(auth_cookie_expiration)

WordPress にログインしたまま一定時間がたつと、自動的にログアウトされます。この時間は、auth_cookie_expiration というフィルターで変えられます。この記事では、標準の時間と仕組み、延長・短縮するコード、すでにログインしている人を今すぐログアウトさせる方法を説明します。

標準のログイン有効期限

ログイン画面の「ログイン状態を保存する」にチェックしたかどうかで、有効期限と Cookie の扱いが変わります(WordPress 本体の wp_set_auth_cookie() の実装による)。

ログイン時の操作 ログインの有効期限 Cookie の扱い
「ログイン状態を保存する」にチェックしない ログインから2日(172800秒) ブラウザーを閉じると消える Cookie
「ログイン状態を保存する」にチェックする ログインから14日(1209600秒) 有効期限つきの Cookie(期限の12時間後まで保存)

押さえておきたい点は次の3つです。

  • 有効期限はログインした時刻から数えます。管理画面を操作していても延長されません。「一定時間操作しなかったらログアウト」という仕組みは、WordPress 本体にはありません。
  • チェックしない場合は、有効期限の前でも、ブラウザーを閉じると Cookie が消えてログアウトします(ブラウザーの「前回開いていたページを開く」設定によっては残ることがあります)。
  • 有効期限はログインしたときに決まります。設定を変えても、すでにログインしている人には効かず、次にログインしたときから新しい時間になります。

コードを置く場所

以下のコードは、wp-content/mu-plugins/ フォルダーに PHP ファイル(例: login-expiration.php)を作って書くのがおすすめです。テーマの functions.php に書くと、テーマを変えたときに設定が外れます。mu-plugins フォルダーが無ければ作ります。中のファイルは有効化の操作なしで読み込まれます。

ログインの有効期限を変える

auth_cookie_expiration フィルターは、有効期限の秒数($length)、ユーザー ID($user_id)、「ログイン状態を保存する」にチェックしたか($remember)を受け取り、秒数を返します。

<?php
/**
 * Plugin Name: ログインの有効期限を変更する
 */
add_filter( 'auth_cookie_expiration', function ( $length, $user_id, $remember ) {
	if ( $remember ) {
		return 30 * DAY_IN_SECONDS; // 「ログイン状態を保存する」にチェックしたとき: 30日
	}
	return 8 * HOUR_IN_SECONDS;     // チェックしないとき: 8時間
}, 10, 3 );
  • DAY_IN_SECONDS(86400)や HOUR_IN_SECONDS(3600)は WordPress が定義している定数です。
  • add_filter() の4番目の引数 3 を忘れると、$user_id と $remember が渡されずエラーになります。
  • 保存したら一度ログアウトしてログインし直し、新しい時間を適用します。

管理者だけ短くする

管理者アカウントは乗っ取られたときの影響が大きいため、ログインの有効期限を短くする考え方があります。管理者(manage_options を持つユーザー)だけを2時間にし、ほかのユーザーは標準のままにする例です。

<?php
add_filter( 'auth_cookie_expiration', function ( $length, $user_id, $remember ) {
	if ( user_can( $user_id, 'manage_options' ) ) {
		return 2 * HOUR_IN_SECONDS; // 管理者は「ログイン状態を保存する」に関係なく2時間
	}
	return $length; // ほかのユーザーは標準(2日または14日)のまま
}, 10, 3 );

このフィルターはログインの処理中に呼ばれるため、「今ログインしている人」を調べる current_user_can() ではなく、ユーザー ID を指定する user_can() を使います。

短くしすぎると、記事を書いている途中でログインが切れます。管理画面を開いたままログインが切れた場合は、画面の上にログイン用の小さな画面が表示され、ログインし直すと作業を続けられます。ブロックエディターは編集内容を自動保存していますが、長い記事を書くときは「下書き保存」をこまめに押すと安心です。

「ログイン状態を保存する」を使わせない

チェックの有無で時間を分けたくない場合は、フィルターで $remember を見ずに同じ秒数を返します。チェックボックスは残りますが、時間には影響しなくなります。

<?php
add_filter( 'auth_cookie_expiration', function ( $length, $user_id, $remember ) {
	return 12 * HOUR_IN_SECONDS; // チェックの有無に関係なく12時間
}, 10, 3 );

チェックボックス自体も見せたくない場合は、ログイン画面にスタイルを追加して隠します。チェックボックスは forgetmenot というクラスの段落に入っています。

<?php
add_action( 'login_head', function () {
	echo '<style>.forgetmenot { display: none; }</style>';
} );

見た目を隠すだけなので、時間を決めているのは上のフィルターです。両方を組み合わせて使います。なお、チェックしない場合の Cookie はブラウザーを閉じると消えるため、チェックボックスを隠すと、ブラウザーを閉じるたびにログインし直す運用になります。

今ログインしている人をログアウトさせる

有効期限を短くしても、すでにログインしている人には効きません。すぐに切りたい場合は、次の方法でセッションを終了させます。

管理画面では、「ユーザー」でユーザーの編集画面を開き、「セッション」欄のボタンを押します。

  • 自分のプロフィールでは「他のすべての場所でログアウト」と表示され、今使っているブラウザー以外のログインが切れます。
  • 管理者が他のユーザーを開いた場合は「すべての場所でログアウト」と表示され、そのユーザーのすべてのログインが切れます。

WP-CLI が使える環境では、次のコマンドで操作できます。

# ユーザー admin のログイン中のセッションを一覧する(ログイン時刻・期限・IP アドレス)
wp user session list admin

# ユーザー admin のすべてのセッションを終了する
wp user session destroy admin --all

# 全ユーザーを一度にログアウトさせる(wp-config.php の認証用キーを作り直す)
wp config shuffle-salts

wp config shuffle-salts は wp-config.php の AUTH_KEY などの値を新しくするため、自分を含む全員がログアウトします。wp-config.php を書き換えられる権限が必要です。アカウントの乗っ取りが疑われるときに使います。

「操作しなかったらログアウト」にしたい場合

一定時間操作がなかったらログアウトさせたい場合、WordPress 本体には設定がありません。WordPress.org のプラグインディレクトリには、この機能を持つプラグイン(例: Inactive Logout)があります。導入する場合は、最終更新日と、今の WordPress のバージョンでの動作確認状況を確かめてから使います(2026年11月時点)。

注意点

  • 有効期限を長くするほど、パソコンの共用や Cookie の盗難が起きたときの危険が大きくなります。管理者や編集者のアカウントは長くしすぎないようにします。
  • セキュリティ系のプラグインにもログインの有効期限を変える設定があることがあります。同じ auth_cookie_expiration フィルターを使うため、どちらの値が使われるかは実行順で変わります。設定はどちらか一方にまとめます。
  • ログインがすぐ切れる、時間どおりに切れないといった不具合は、有効期限の設定ではなく、URL の設定や Cookie の問題であることがあります。原因の調べ方は「WordPressのログインがすぐ切れる原因と対処」で説明しています。

まとめ

  • 標準のログイン有効期限は、ログインから2日(「ログイン状態を保存する」にチェックすると14日)
  • 期限はログイン時刻から数え、操作しても延長されない
  • auth_cookie_expiration フィルターで秒数を返すと変更でき、次のログインから効く
  • 管理者だけ短くするときは user_can( $user_id, 'manage_options' ) で判定する
  • すでにログインしている人は、プロフィール画面のボタンか wp user session destroy、全員なら wp config shuffle-salts でログアウトさせる

お気軽にご相談ください

お見積りへ お問い合わせへ
▲