WordPress で 認証を強制する方法

僕はよくやるのですけど一般的にはどうなんだろうねと思いつつ。

どこかのサイトの管理を依頼されたときに、特に大幅な変更をする場合、本番系で直接直せないから、開発系を作るわけですよ。
で、イントラネットだったら別に開発系見えてもいいし、自分だけでやっているシステムなら、自宅LAN、というか自分のPC上にVMでもつくればいいし、それこそxamppでもインストールすればいいのではありますが。

デザイナーが別にいたり、そもそもクライアントに確認してもらわないといけない場合とかはインターネット上にサイトを作らないといけないわけですが。
これはクロールされたり、第3者にみられるとまずかったりするので、認証をかけたいと。

普段はさくらインターネットを使っているので、単に.htaccsess 書けば終わりなんですが。
riddles cafeのサーバーはお名前.comにあるので。
この子は.htaccsess に自分で認証を書けない + 独自認証設定画面はあるけど、wordpressと共存できないというのがわかりまして。(いやわかるのに数時間かかったけど)

しょうがないので、Wordpress 自身にある認証機能を、強制させる(認証しない状態ではコンテンツを表示しない)様にするしかないかなあと……。

で、使っている子テーマに TwentyTen から header.php をコピーして修正。
「<title><?php」のあとに
[code lang=”php” gutter=”false”]
/* Forced authentication */
if (!is_user_logged_in()) {
auth_redirect();
}
[/code]
を足す、だけですみました。

解説すると、すべてのページが表示されるときに、header.phpは呼ばれる(ようにTwentyTenは作られている)、<br /> ので、この先頭部分で、 is_user_logged_in() によってすでに認証がされているかを確認します。条件文に論理否定演算子!がついているので、条件式は誰も認証されていない状態の時に、真になります。したがって、 auth_redirect();が実行されて、認証画面にリダイレクトされる、というわけです。

まあ、何となくこっちの方が後々のメンテナンスは楽な気がするので、こっちでやるようにしようかなあ……。テーマに本番系か否かを判断する機構を作り込んでおいた方がいいかもしれないけど……