WordPressのブログ全体に認証をかける

「会員専用のページとか投稿はできないの?」と言われ、「.htaccess置いてベーシック認証かければいいんじゃね?」と答えたんですが、ちらっとググったところによるとパーマリンクの管理で WordPress自体が .htaccessを書き換えていると。
そうすると、ページのディレクトリ構造に依存するような .htaccessを置いておくのはどうなの、「RewriteEngine On」絡みで嫌らしいことがあっても平気なの、ということが心配になって、「個別ページじゃなくて、新しく会員専用のブログを作って、ブログ全体にパスワードかけるというのでどうか」という話になりました。

それ用プラグイン

こちら(→ http://blog.taragana.com/index.php/archive/angsumans-authenticated-wordpress-plugin-password-protection-for-your-wordpress-blog/ )にブログ全体にパスワードをかけるプラグインがあります。プラグインといっても PHPファイル1つで中をみるとあっけないものです。
これを『home/www/WPMU/wp-content/plugins/ac_authenticator』へコピーして有効化すると OKです。(素の PHPファイルを pluginsフォルダに直接置きたくないので「ac_authenticator」というサブディレクトリを掘ってあります)

プラグインの修正

えっと、そのままでは WordPress MU 2.6.5 では動きませんでした。たぶん、普通の WordPressでも動かないはず。ログインしているかどうかを COOKIEで判断しているんですが、そこんとこがきっと古いんですね。

function ac_auth_redirect() {
  if ( (!empty($_COOKIE[USER_COOKIE]) && 
     !wp_login($_COOKIE[USER_COOKIE], $_COOKIE[PASS_COOKIE], true)) ||
        (empty($_COOKIE[USER_COOKIE])) ) {
    nocache_headers();
           :
           :

ここをこう(↓)いう風に変えておきます。

function ac_auth_redirect() {
  if ( !is_user_logged_in() ){
    nocache_headers();
           :
           :

これでプラグインを有効化しておくと、ログインしていないとログインページへ飛ばされます。厳密な会員管理まで必要ないなら、会員共通のユーザIDとパスワードを作っておけば、いいんじゃないでしょうか。

参考

同じような用途でメンテナンス中プラグインが使えないかなと思って入れてみたのですが、ログインできるのがデフォルトでは管理者権限ユーザだけみたいなので、ただ見せたり投稿させたりするのに管理者権限を出すのもなぁということと、わざわざ権限管理のプラグインを新たに入れるのもなぁということで、今回はこっちの方法にしました。