inoma-NOTE

自分のためのメモじゃ

複数のBasic認証ページでどれかひとつだけ認証したらOKにする方法【WP】

WPで特定のページにBasic認証をかけるやり方があるが、その記述で、例えば会員限定ページが2ページあるとして、そのうちどれかを認証したらもうひとつの方では認証を促されないという条件分岐のメモ。

ベーシック認証のかけかた

functions.phpに下記を記述。

<?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の一番上に条件分岐を記述。
adminにID、passwordの部分にパスを記入。

固定ページに付ける場合

この場合固定ページのアドレスがsampleだった場合。
他にもIDで指定してもいい。

<?php
 if(!is_home()): 
  if(is_page('sample')):
   $userArray = array("admin" => "password");
   basic_auth($userArray); 
  endif;
 endif;
?>
カスタム投稿のページに付ける場合

sampleの部分がカスタム投稿の名前。

<?php
 if(!is_home()): 
  if(get_post_type() === 'sample'):
   $userArray = array("admin" => "password");
   basic_auth($userArray); 
  endif;
 endif;
?>

複数ページの場合の条件分岐

こうすると、sample1ページで認証入力をしたら、sample2のページにいっても認証を促されることはない。逆も同じ。
その都度||で区切り増やしていける。

<?php
 if(!is_home()):
  if( is_page('sample1') || is_page('sample2')):
   $userArray = array("admin" => "password");
   basic_auth($userArray);
  endif;
 endif;
?>

ページによってIDパスを変えたい場合

<?php
 if(!is_home()):
  if ( is_page('sample1') ):
   $userArray = array("a" => "a");
   basic_auth($userArray);
  elseif( is_page('sample2') ):
   $userArray = array("b" => "b");
   basic_auth($userArray);
  endif;
 endif;
?>