Edited at

wordpressのパスワード保護で、保持期限をfunctions.phpとアクションフックで変更する

More than 5 years have passed since last update.


パスワード保護って便利ですよね

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