7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2013-09-24

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

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

7
7
2

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
  3. You can use dark theme
What you can do with signing up
7
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?