WordPressの特定の下層ページにベーシック認証を設定する方法

更新日:2021年11月26日 /  投稿日:2021年02月13日

WordPressの特定の下層ページにベーシック認証を設定する方法

WEBサイトの中には特定のユーザーにのみ、あるページを公開して運用する事がよくあります。

SNSや会員サイトなどでは、ユーザーのマイページなどがその例にあたるかと思います。

こうしたページを作る場合、ベーシック認証という技術を使って特定のユーザーにのみ、ページを公開させる設定をしています。

今回はWordPressの特定の下層ページにベーシック認証を設定する方法をご紹介していきます。

ベーシック認証とは

ベーシック認証を分かりやすく説明すると、サイトに閲覧の制限をかける仕組みの事を言います。

詳しい内容は、以下よりご確認頂けます。

ベーシック認証(Basic認証)とはWebサイトの特定の領域、つまりページやファイルにアクセス制限をかけることができる認証方法の1つです。ベーシック認証をかけると、認証をかけたWebサイトにアクセスしようとしたとき、下の画像のような認証ダイアログが立ち上がって、ユーザー名(ID)とパスワードの入力が求められます。

https://www.itra.co.jp/webmedia/basic_authentication.html

ここからは、このベーシック認証を使ってWordPressの下層ページにベーシック認証をかける方法をご説明していきます。

ベーシック認証の設定方法

WordPressでベーシック認証を設定する場合、プラグインを使った設定をする方が簡単ですが、プラグインを多用するとjsファイルがコンフリクトしたりするといった弊害も出る場合があります。

また、今回は特定のページに対してベーシック認証を設定を想定していますので、以下の方法を参考にしてみて下さい。

functions.phpに以下のコードを記述

以下のコードを、funcitons.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に以下のコードを記述

以下のコードをheader.phpの一番上に記述します。

<?php
  if(!is_home()):
    if(get_post_type() === '○○○'):  //ベーシック認証をするページのスラッグorID
      $userArray = array(
        "任意のID" => "任意のPASS"
      );
      basic_auth($userArray);
    endif;
  endif;
?>
<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
以下、省略…
  • ○○○の部分には、ベーシック認証をしたい下層ページのスラッグ名、もしくはページIDを設定します
  • 次に任意のIDとPASSの部分にそれぞれ設定をします。

実際にベーシック認証が動作しているか確認

ここまでの手順を終えましたら、header.phpとfunctions.phpをアップロードして、実際にベーシック認証がうまく動作するかを確認します。

ベーシック認証をかけたページのURLをひらき、以下のようなポップアップが表示されていたら、ベーシック認証が動作していますので、後は、設定したIDとパスワードを入力してちゃんとページが閲覧できるかまで確認してみましょう。

ベーシック認証のポップアップ

複数のID・PASSを設定する場合

サイトによっては、当然複数のユーザーがログイン情報を持つ事も考えられます。

そういった場合は、以下のコードをheader.phpに記述します。

<?php
  if(!is_home()):
    if(is_page('○○○')):  //ベーシック認証をするページのスラッグorID
      $userArray = array(
        "任意のID1" => "任意のPASS1",
        "任意のID2" => "任意のPASS2",
        "任意のID3" => "任意のPASS3",
        "任意のID4" => "任意のPASS4"
      );
      basic_auth($userArray);
    endif;
  endif;
?>

まとめ

WordPressの特定のページにのみベーシック認証を設定する方法についてご紹介いたしましたが、いかがだったでしょうか?

会員サイトなどでは一般のユーザーと違い、会員登録を行ったユーザーのみが閲覧できるページや、その他にもSNSのようにアカウントを作成し、マイページなどが存在するサイトではこのベーシック認証という技術はよく使われており、こうしたサイトを運用する際にはWordPressとベーシック認証を合わせて使用する事がよくあります。

こうしたサイトを作成の際に、上記の記事が参考になれば幸いです。

この記事を書いた人

KNOWLEDGE BASEの中の人

KNOWLEDGE BASEの中の人

2013年よりWEB制作会社に入社し、デザイン・コーディングからディレクションと幅広く従事。

その他の関連記事はこちら