【WordPress】作業時にログアウトしないようにする方法

WordPressで記事を書いたりカスタマイズをしている間は基本的にログインした状態だと思います。

しかししばらくログインした状態でいると、セッションの有効期限が切れてログインを求めるダイアログがでてきます。

login

セキュリティ的には正しいのですが、作業中に出てくると多少煩わしいものであります。

作業中にセッションが切れないようにした手順を説明します。

下のページでも同じようなことが紹介されていますが、WordPress4.0.0以降では投稿の保存などの動作が正しく動作しません。

WordPressリファレンス)WordPressのコラム: 一定時間でログアウトする - ブラウザ開きっぱなしでいつでも管理者ページにアクセスできるのは危険だしね
スポンサーリンク

認証のチェック

以下の順序で処理が行われます。

  1. index.php
  2. wp-blog-header.php
  3. wp-load.php
  4. wp-config.php
  5. wp-settings.php
    • $GLOBALS[‘wp’]->init();
  6. wp-includes/class-wp.php
    • wp_get_current_user()
  7. wp-includes/pluggable.php
    • _wp_get_current_user()
  8. wp-includes/pluggable.php
    • $user_id = apply_filters( ‘determine_current_user’, false )

管理画面やadmin-ajax.phpでのAjaxアクセス時もほぼ同じで、3. のwp-load.phpあたりから始まります。

「determine_current_user」フィルタに関してはwp-includes/default-filters.phpでフックされてます。

wp_validate_auth_cookieは管理画面用、wp_validate_logged_in_cookieは管理画面以外用です。

wp_validate_logged_in_cookieは管理画面以外の時にwp_validate_auth_cookieを呼んでいるので、結局wp_validate_auth_cookieをよく見て割り込めそうなところを探せばよさそうです。

実装

ここで説明する内容は直接本番環境で行わないほうが無難です。
一度ローカル環境で確かめた上で反映を行うなどの手順を踏んでください。

wp_validate_auth_cookieでは、正しく認証を終えると以下のアクションが呼ばれます。

また、認証用のクッキーの設定はwp_set_auth_cookie関数で行うことができます。

同時にセッショントークンの更新も行う必要があります。

したがって以下のコードを子テーマのfunctions.phpに記述することで、アクセスするたびにログインの有効期限を延長できます。

管理画面でのみ延長する場合

フロントページのアクセスで延長しないように修正する場合はis_adminで判定すればよいです。

しかしこれだけだとadmin-ajax.phpを使用したAjaxアクセスは弾かれません。

DOING_AJAXが定義されているかどうかで判定を行います。

有効期限を設定する

wp_set_auth_cookie関数内に有効期限に対するフィルタがあります。

デフォルトでは2週間になっており、アクセスのたびに有効期限を延長する場合には長すぎる設定です。

auth_cookie_expirationをフックして1時間に設定します。

まとめ

WordPressの認証に関してコードを一通り眺めましたがなかなか面白かったです。

WordPressはいくつもクッキーを発行しているのですが以下に詳細が書かれており、なるほどと思いました。

コードに関しては実用性はあまり高くないと思いますが、よければ試してみてください。