LoginSignup
7

More than 5 years have passed since last update.

posted at

updated at

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

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

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
7