WordPressで固定ページやカテゴリページなど個別にBasic認証をかけるには
| WEB制作、WordPressこの間、自転車で移動している最中、びっくりしたんですが、信号機が薄っぺらいんですよ。
仮のものかと思うぐらいです。いやぁ、電車で移動ばっかりだったので、こういうことも気が付かなかったのですね。
これからは、こういうことも気がつく人間になりたいですね。
さて、本編ですが、仕事でWordPressの案件をしていると、公開している本番サーバでテストアップをすることもたまにあります。普段なら、テスト環境を作成し、そこ全体にBasic認証をかけるのですが、いかんせん、WordPressの場合こちらでTemplateやカスタム投稿タイプの設定をし、入力はクライアントが行うので、本番に反映してくださいと依頼がある。
リンクを貼らずにいれば基本的にはページを見られることは無いのだろうけども、Googleさんはどこまで見つけるのかというところで、万全を期すために、テストアップしているページはBasic認証をかけます。
ここで困るのは.htaccessに制限がかかっている、もしくは、全く使えない場合です。
この場合は、個別にアクセス制限をかけることができないことがあります。
そんな時に役に立つのがphpで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」にBasic認証をかけたいテンプレートへの分岐をつかって下記を追加する
if(!is_home() && is_tax('test')):
$userArray = array(
"id" => "password"
);
basic_auth($userArray);
endif;
複数のIDとパスワードを設定する場合は$userArrayを配列にしているのでそれを増やすだけ。
if(!is_home() && is_tax('test')):
$userArray = array(
"id" => "password",
"hoge" => "page"
);
basic_auth($userArray);
endif;
うん、これだけで認証をかけれる、個別でかける場合は、この方法が一番楽なきがす。
公開中のサーバの.htaccessをいじるのは本当に怖いです。