◯ やりたいこと【前提の説明】
Wordpressにて、条件分岐によりベーシック認証を行いたいと考えております。
1.特定のカテゴリーに属す記事(in_category)
2.特定のカテゴリー(is_category)
3.特定の固定ページ
4.特定の投稿
※ 記事には複数のカテゴリーを設定して運用する想定です。
◯ 実装について【前提の説明】
まずは、1の機能から実装してみました。header.phpとfunction.phpに以下のような
ロジックを実装しましたが、想定と異なる動きをしてしまっております。
<以下、header.phpの冒頭に追記>
<?php if(!is_home()): if(in_category('category01')){ $userArray = array("user01-1" => "pwd01-1","user01-2" => "pwd01-2",); basic_auth($userArray); }elseif(in_category('category02')){ $userArray = array("user02-1" => "pwd01-1","user02-2" => "pwd01-1",); basic_auth($userArray); }elseif(in_category('category03')){ $userArray = array("user03-1" => "pwd01-1","user03-2" => "pwd01-1",); basic_auth($userArray); } endif; ?><以下、function.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);
}
◯ 想定と異なる動きについて【&質問】
'category01'、'category02'、'category03'に含まれる記事について、
正しく動作します。
その一方で、この3つのカテゴリーページにアクセスした際には、
いずれも最初のif分の条件分岐が適用され、
if(in_category('category01')){
$userArray = array("user01-1" => "pwd01-1","user01-2" => "pwd01-2",);
basic_auth($userArray);
こちらのID/PWDで認証が成功します。
本来、カテゴリーページを開いた場合、in_category関数はFalseを返すはず
なのに、この点が解せません。
◯ 試してみたこと【&前提の説明】
ちなみに、当方がWeb制作業者に開発してもらったテンプレートの他
Twenty Nineteenというテンプレートでも同じ挙動をしますので、
わたしが書いたロジックに問題があるのだと認識しております。
なぜ、このような動作となるのか、皆様のご知見を拝借させていただけますでしょうか?
◯ 利用環境【&前提の説明】
Wordpressの最新版です。
他、ツールの利用はありません
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/02 04:39
2021/02/02 05:15
2021/02/03 01:35
2021/02/03 04:06
2021/02/06 02:28