WordPress 固定ページにベーシック認証を設定する方法

WordPress で特定の固定ページにベーシック(BASIC)認証を設定する方法を紹介します。
例えば、会員向けの特典ページなどで、IDパスワードを知っている特定のユーザーに見せたいページを作る時に便利な方法です。
ここで紹介する方法は、固定ページにベーシック認証を設定することを前提に説明しています。

  1. コードを二箇所に追加
    1. function.php にコードを追加
    2. header.php にコードを追加

コードを二箇所に追加

特定のページにベーシック認証を設定するには、コードを function.phpheader.php の二箇所に追加するだけで実装が可能です。

function.php にコードを追加

まずは 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);
}

直接本番環境で実装する場合は、コード追加後にページが正しく表示されているかをご確認ください。
function.php にコードを追加した段階ではまだ何も起こりません。

header.php にコードを追加

続いて header.php の1行目に次のコードを追加します。
コード追加時 is_page に対象となるページのIDまたはページスラッグを指定してください。
サンプルコードでは、ベーシック認証の「IDとパスワード」に「ID : admin」「パスワード : 4649」を指定しています。

<?php // 特定ページにベーシック認証を設定
if(!is_home()){ // ブログ投稿インデックスページ以外
if(is_page('xxxxx')){ // ベーシック認証の対象ページのページIDまたはページスラッグを指定
$userArray = array(
"admin" => "4649" // ID と パスワード を指定
);
basic_auth($userArray);
}
}
?>

is_pagexxxxx 部分は、任意のページの「ページID」または「スラッグ」を指定してください。
例えば、 https://www.example.com/product と言うページであれば、指定するスラッグは「product」となります。ページIDを指定する場合は、管理画面からページIDを確認してください。

ベーシック認証のIDとパスワードも同様に、任意ものに変更してください。
※ページIDとベーシック認証のIDは混同しないようにご注意ください。

コード編集後に対象ページへアクセス。ベーシック認証が適用されているのをご確認ください。

まとめ

WordPress で特定の固定ページにベーシック(BASIC)認証を設定する方法を紹介しました。