パスワード保護って便利ですよね
wordpressの記事などで、特定の方に閲覧してもらいたい時などに、
「パスワード保護」を用いてパスワードをこっそり配布する、ということを、よく行っております。
でもパスワード保持期限は短くしたい
で、そのパスワードをcookieに保持する期限が、デフォルトだと10日。
セキュリティ上の理由で、もっと短くしたい環境もあるでしょう。
で、それをどう実装するか。
さて、どうやって実装するべきか
日本語の情報では、wp-pass.phpの項目を直接変更してね!とか、
また3.4移行はwp-pass.phpが無いので、wp-login.phpの該当行を直接変更してね!
などが多く見受けられます。実にスマートではないですね。
はい、私も直接変更していました。実にスマートではないですね。
結論と実例
そこで、functions.phpとアクションフックを用いて、wordpressの本体ファイルに手を付けない形で実装してみました。
以下のサンプルでは、パスワード保持期限を1時間としております。
時間を変更する場合は、「HOUR_IN_SECONDS」の部分を、10分であれば「600」など、秒数を指定してあげると宜しいです。
ちなみに「10 * MINUTE_IN_SECONDS」の方がスマートかも。
間違ってたらご指摘ください。当方では実装できてます。
function custom_postpass_time() {
require_once ABSPATH . 'wp-includes/class-phpass.php';
$hasher = new PasswordHash( 8, true );
setcookie( 'wp-postpass_' . COOKIEHASH, $hasher->HashPassword( wp_unslash( $_POST['post_password'] ) ), time() + HOUR_IN_SECONDS, COOKIEPATH );
wp_safe_redirect( wp_get_referer() );
exit();
}
add_action( 'login_form_postpass', 'custom_postpass_time' );
参考ページ
Custom Post Password Cookie Expiry Time - Gists - GitHub
https://gist.github.com/3259814
おまけ:秒数を解りやすく指定できる定数などwordpressには用意されているみたい
便利ですな、これ。
define( 'MINUTE_IN_SECONDS', 60 );
define( 'HOUR_IN_SECONDS', 60 * MINUTE_IN_SECONDS );
define( 'DAY_IN_SECONDS' , 24 * HOUR_IN_SECONDS );
define( 'WEEK_IN_SECONDS', 7 * DAY_IN_SECONDS );
define( 'YEAR_IN_SECONDS', 365 * DAY_IN_SECONDS );
参考ページ
WordPress のコアファイルで見つけたカッコイイ PHP コードの書き方・関数などのまとめ
http://pimpmysite.net/archives/267