Help us understand the problem. What is going on with this article?

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away