特定のページのみベーシック認証をかける方法

WordPressで特定のページ(固定ページや投稿)に手動でベーシック認証を掛ける方法。
  1. functions.phpにコードを追加

  2. header.phpにコードを追加

  3. ユーザー名とパスワードを設定

  4. 正常に動作しているか確認

1、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);
}

2、header.phpにコードを追加(一番上に記述)

  
 "12345"
);
basic_auth($userArray);
endif;
endif;
?>

今回は固定ページ(IDが11)にのみ設定。if(is_page(’11’)): を if(get_post_type() === ‘カスタム投稿タイプ’): にすると特定のカスタム投稿に設定可能。
ページの条件分岐については条件分岐タグ|WordPress Codex 日本語版

3、ユーザー名とパスワードを設定

上記の “admin” => “12345” に “任意のユーザーID” => “任意のパスワード” を設定

4、正常に動作しているか確認

もし、正しいユーザー名とパスワードを入力しても認証できない場合は .htaccess を以下のように書き換えてみる(追加してみる)

# BEGIN WordPress
IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) – [E=HTTP_AUTHORIZATION:%1]
RewriteBase /
RewriteRule ^index\.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]

# END WordPress