WordPressで会員サイトの自動ログイン期間(cookie有効期間)を変更する

投稿者: | 2014年8月11日

WordPressで会員サイトを構築する案件が非常に増えています。
構築に関する記事は、既に様々なサイトで紹介されていますし、弊社でも既にいくつかお伝えしてきました。

関連エントリ:
WordPressで会員制サイトを制作
http://vintage.ne.jp/blog/index.php?itemid=315

WordPressで会員サイト theme my loginで任意のページを非会員ページにする
http://vintage.ne.jp/blog/index.php?itemid=314

ただ、一口に会員サイトと言っても、クライアントごとに大小様々な要件があり、
その一つ一つへ対応していくには、やはり多少のカスタマイズが必要になります。

今回は、自動ログインの期間についてです。

会員は、ログイン時に「ログイン状態を保存する」にチェックを入れることで、
一定期間パスワードを入力する必要がありませんが、
この期間はデフォルトで10日間です。

これでは短すぎるということで、この期間を変更する方法を模索しました。
※WordPressバージョン3.5にて検証

WordPressはログインセッションをcookieで管理しています。
cookieの有効期間は、デフォルトで48時間、「ログイン状態を保存する」にチェックを入れて10日間です。

よって、cookie発行時の有効期間を変更すれば良いのですが、
作業を行った2013年当時、WordPressのバージョンは3.5で、
WordPressのAPIやフィルターフック等の仕様を見ても方法が見つからず、
ソースを一つ一つ追っていくしかありませんでした。

ログイン処理を追っていったところ、こんな記述を発見。

/wp-includes/pluggable.php 652行目から658行目(ver3.5.2の場合)

function wp_set_auth_cookie($user_id, $remember = false, $secure = '') {
if ( $remember ) {
$expiration = $expire = time() + apply_filters('auth_cookie_expiration', 1209600, $user_id, $remember);
} else {
$expiration = time() + apply_filters('auth_cookie_expiration', 172800, $user_id, $remember);
$expire = 0;
}

“wp_set_auth_cookie”という、ログインIDをクッキーに保存する関数の中、
保存期間が$expirationにセットされます。
その部分で”auth_cookie_expiration”が差し込まれています。

試しに、ソースの他の部分で、このフィルターフックがあるかどうか検索したところ、ヒットなし。
WordPress公式のフィルターフック一覧にも載ってませんが、ひっそりと用意されていたようです。

そこで、テーマのfunctions.phpに下記を記入したところ、うまく動作しました。

//ユーザーログイン有効期限変更
function my_auth_cookie_expiration($user_id, $remember){
//デフォルト48時間
$lifetime = 172800;
//ログイン保存の場合 ※この例では30日 単位は秒
if ( $remember ) $lifetime = 3600 * 24 * 30;
return $lifetime;
}
add_filter('auth_cookie_expiration','my_auth_cookie_expiration',10,2);

 

ちなみに、
WordPress バージョン3.7.0以上では、正式に保存期間を変更できるフィルターフックが用意された模様です。
※こちらは未検証ですのでご注意ください。

functions.phpに以下を記入します。

add_filter(‘post_password_expires’,'my_post_password_expires’);
function my_post_password_expires($time){ $time = 3600 * 24 * 30; return $time; }

参考:
http://ja.forums.wordpress.org/topic/25124
https://core.trac.wordpress.org/changeset/25450

 

Webサイト構築、Webシステム構築に関してのご依頼、ご質問等がある場合は弊社ホームページ上のお問い合わせフォームもしくは下記連絡先までお問い合わせ下さい。

お問い合わせフォーム

株式会社ヴィンテージ

TEL:093-513-7255