WordPressには標準で、記事のパスワードロック機能が付いていますが、記事単位ではなくて、カテゴリー単位で制御したい時がありますよね。
会員にのみ公開したい記事が、複数ある時や、文書を配布したい時など、カテゴリー単位でパスワードをかけたいと思う場面は多いと思います。
しかしながら、そもそもWordPressのカテゴリーには、フォルダが存在しません。 カテゴリーというグループがまるであるかのように、URLをシミュレートしているだけです。
パスワードロックが正常に動くようにするために、ロックするカテゴリーの記事は、複数のカテゴリーにまたがっていたりしないように配慮しましょう。
《その1》PHPの条件分岐を使ってBasic認証をかける
まず、パスワードロックするカテゴリーを作ります、作成したらそのカテゴリーIDをメモしておいてください。
functions.phpにソースを追記
WordPressでBasic認証を有効にするために、functions.phpに以下のソースを追加してください。
function basic_auth($auth_list,$realm="Restricted Area",$failed_text="認証に失敗しました"){ if (isset($_SERVER['PHP_AUTH_USER']) and isset($auth_list[$_SERVER['PHP_AUTH_USER']])){ if ($auth_list[$_SERVER['PHP_AUTH_USER']] == $_SERVER['PHP_AUTH_PW']){ return $_SERVER['PHP_AUTH_USER']; } } header('WWW-Authenticate: Basic realm="'.$realm.'"'); header('HTTP/1.0 401 Unauthorized'); header('Content-type: text/html; charset='.mb_internal_encoding()); die($failed_text); }
header.phpにソースを追記
次に、特定のカテゴリーの時だけ、パスワードロックをしたいので、その条件分岐をheader.phpに追加します。
<?php if(!is_home()): if(is_category('17')) : $userArray = array("admin" => "password" ); basic_auth($userArray); endif; endif; ?>
数字がカテゴリーIDです。ユーザーIDとパスワードは好きなものに変更してください。
.htaccessにソースを追記
RewriteCond %{HTTP:Authorization} ^(.*) RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
これで完了です。制限をかけたカテゴリーにアクセスしてみて、IDとパスワードを要求されたら、成功です。