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