WordPressで分類別にベーシック認証

様々なサイトを参考にしましたが少しハマって悩んだので記録しておきます。
サイト全体ではなく、カテゴリー毎やタクソノミーのタームにベーシック認証をかけようとしてタームの指定をミスって悩みました。

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の1行目に以下を記載
(3、4行目の日本語部分は環境に合わせて書き変え)

<?php
if(!is_home()): 
if(has_term( 'ターム名', 'タクソノミー名' )):
$userArray = array("ユーザー名" => "パスワード");
basic_auth($userArray); 
endif;
endif;
?>

条件指定はカテゴリーやページIDや投稿やさまざまなので「WordPress Codex」の「条件分岐タグ」を参考にしてください。

「wordpress カテゴリー ベーシック認証」などで検索して参考にさせて頂いたサイトはたくさんありましたがなぜか実装出来ず悩みました。
でも結局は私がタームの書き方を間違えていて認証が効かなかっただけでした。
また、サーバーのPHPがセーフモードだったら認証がうまく通らないので、ベーシック認証は効いてるみたいだけどパスワードが通らないわ!という事になったら.htaccessファイルの「RewriteEngine On」の下にこの2行を追記しましょう。

RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]

これでしっかり効きました。
条件分岐で分類やカテゴリー毎に異なるID・パスワードを設定できますよね。便利!!

この記事にコメントを残す