WordPressの特定のページにBasic認証を設定する方法
MENU
  • 記事公開:2019/10/08
  • 最終更新:2019/10/03

WordPressの特定のページにBasic認証を設定する方法

特定の投稿や特定の固定ページなど、一部のページにのみBasic認証を設定したいと考えたことはありませんか?

私はとある案件で、特定のページにのみBasic認証を設定しなければならなくなりました。
調べてみると、以外と簡単なカスタマイズでBasic認証を設定することができました。

今回は、そのとき行ったカスタマイズをご紹介したいと思います。
特定のページにのみBasic認証を設定するカスタマイズです。

仕組みさえ分れば、3分も程度で行えます。
コピペ用のコードも用意しておきましたので、ご利用ください。

それでは、特定のページにのみBasic認証を設定するカスタマイズをご紹介していきます。

この記事は約 12 分で読めます。

WordPressのカスタマイズはお任せください。

WordPressのカスタマイズを格安で代行いたします。ご希望のカスタマイズがあればご相談ください。

特定のページにBasic認証を設定する手順

特定のページにBasic認証を設定する手順を見ていきましょう。
手順は全部で5ステップです。

  1. functions.phpにコードを追加する。
  2. header.phpにコードを追加する。
  3. Basic認証を設定するページを定義する。
  4. 認証用のユーザー名とパスワードを設定する。
  5. Basic認証が正常に動作しているか確認する。

個別に解説していきます。

手順1:functions.phpにコードを追加する

まずは、以下のコードを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);
}

こちらのコードは調整する必要がありません。
functions.phpに追記すれば、作業は完了です。

手順2:header.phpにコードを追加する

header.phpの一番上に、以下のコードを追記してください。
一番上に追記しないと正常に動作しませんので注意が必要です。

<?php
if(!is_home()):
if(is_page('1')):
$userArray = array(
"admin" => "12345"
);
basic_auth($userArray);
endif;
endif;
?>

こちらのコードは、Basic認証を設定するページごとにコードを調整する必要があります。
調整方法は、次の項をご覧ください。

手順3:Basic認証を設定するページを定義する

先ほどheader.phpに追加したコードにBasic認証を設定するページを定義します。

<?php
if(!is_home()):
if(is_page('1')):
$userArray = array(
"admin" => "12345"
);
basic_auth($userArray);
endif;
endif;
?>

赤文字部分が、Basic認証を設定するページを定義している部分です。
今回のコードは、ページIDが【1】の【固定ページ】にBasic認証を設定しています。

ひとまず、Basic認証の動作確認をしたいので、上記コードの【1】の部分を適当な固定ページのページIDに書き換えてください。動作確認をしますので、存在するページIDに書き換えてください。

カテゴリーページやカスタム投稿にBasic認証を設定する方法は後述しています。
そちらをご覧ください。

手順4:認証用のユーザー名とパスワードを設定する

認証用のユーザー名とパスワードを設定します。
ユーザー名とパスワードは任意の文字列を設定してください。

<?php
if(!is_home()):
if(is_page('1')):
$userArray = array(
"admin" => "12345"
);
basic_auth($userArray);
endif;
endif;
?>

【admin】の部分が【ユーザー名】を定義している部分です。
【admin】を任意の【ユーザー名】に変更してください。

【12345】の部分が【パスワード】を定義している部分です。
【12345】を任意の【パスワード】に変更してください。

複数のユーザー名とパスワードを設定したいときは、以下のように設定しましょう。

<?php
if(!is_home()):
if(is_page('1')):
$userArray = array(
"ユーザー名" => "パスワード",
"ユーザー名" => "パスワード",
"ユーザー名" => "パスワード",
"ユーザー名" => "パスワード"

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

赤文字部分の一番最後の行に注目してください。
一番後ろに【,】が付いていません。

最後のユーザー名とパスワードの行は、最後の【,】は不要です。
【,】を付けると動作しなくなりますので注意してください。

以上で、ユーザー名とパスワードの設定は完了です。

手順5:Basic認証が正常に動作しているか確認する

手順1~4までの作業でBasic認証は完了しました。
Basic認証が正常に動作しているか確認してみましょう。

Basic認証を設定したページにアクセスしてみます。
例えば、ページID【1】の固定ページにBasic認証を設定したなら、そのページにアクセスします。

上記のように、ユーザー名とパスワードを求められればひとまず成功です。

上記の画像はGOOGLEクロームの場合です。
ブラウザによって認証画面は異なります。

設定したユーザー名とパスワードで認証して、ページが表示されればBasic認証の設定は成功です。

認証画面が表示されない場合は、これまでの手順に誤りがある可能性があります。
手順1~4に誤りが無いか確認してください。

認証画面は表示されるが、ユーザー名とパスワードを入れても認証できない場合。
こちらは、次の項の解決策を試してみてください。

追記:正しいIDとPASSでも認証できない場合の対処法

正しいユーザー名とパスワードを入力しても認証できない場合。
.htaccessのコードを調整すると認証できるようになる可能性があります。

WordPress本体と同じ階層にある【.htaccess】のコードを以下のように調整します。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

上記の部分を以下のように書き換えます。

# 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]
</IfModule>
# END WordPress

赤文字の部分を追加しました。

これで、正常に認証できるようになる可能性があります。

【ページの種類別】Basic認証を設定する方法

Basic認証は、以下のようなページに設定することができます。

  • 特定の投稿
  • 特定の固定ページ
  • 特定のカテゴリーページ
  • 特定のタグページ
  • 特定のカスタム投稿

Basic認証を設定するページ、header.phpに追加したコードに定義してやります。

<?php
if(!is_home()):
ここの記述を変えます。
$userArray = array(
"admin" => "12345"
);
basic_auth($userArray);
endif;
endif;
?>

上記の赤文字部分がBasic認証を設定するページを定義する部分です。
ここをBasic認証を設定するページを定義するコードに置き換えてやります。

個別に見ていきましょう。

特定の投稿にBasic認証を設定する方法

特定の投稿にBasic認証を設定したい場合は、以下のように記述します。

<?php
if(!is_home()):
if(is_single('投稿ID')):
$userArray = array(
"admin" => "12345"
);
basic_auth($userArray);
endif;
endif;
?>

【投稿ID】の部分に、Basic認証を設定したい【投稿ID】を記述してください。

投稿IDの調べ方は、以下のコンテンツを参照してください。
WordPressの投稿IDやカテゴリーIDなど各種IDの調べ方

複数の投稿にBasic認証を設定したい場合は、前述したコードの赤文字部分を次のように変更します。

if(is_single(array('投稿ID', '投稿ID', '投稿ID'))):

【’投稿ID’】を【,】で区切って複数指定してやります。
一番最後に【,】をつけると、正常に動作しませんので注意してください。

投稿ページは、デフォルトでパスワードを設定することができます。
Basic認証を設定する機会はあまりないかもしれません。

特定の固定ページにBasic認証を設定する方法

特定の固定ページにBasic認証を設定したい場合は、以下のように記述します。

<?php
if(!is_home()):
if(is_page('ページID')):
$userArray = array(
"admin" => "12345"
);
basic_auth($userArray);
endif;
endif;
?>

【ページID】の部分に、Basic認証を設定したい【ページID】を記述してください。

ページIDの調べ方は、以下のコンテンツを参照してください。
WordPressの投稿IDやカテゴリーIDなど各種IDの調べ方

複数の固定ページにBasic認証を設定したい場合は、前述したコードの赤文字部分を次のように変更します。

if(is_page(array('ページID', 'ページID', 'ページID'))):

【’ページID’】を【,】で区切って複数指定してやります。
一番最後に【,】をつけると、正常に動作しませんので注意してください。

特定のカテゴリーページにBasic認証を設定する方法

特定のカテゴリーページにBasic認証を設定したい場合は、以下のように記述します。

<?php
if(!is_home()):
if(is_category('カテゴリーID')):
$userArray = array(
"admin" => "12345"
);
basic_auth($userArray);
endif;
endif;
?>

【カテゴリーID】の部分に、Basic認証を設定したい【カテゴリーID】を記述してください。

カテゴリーIDの調べ方は、以下のコンテンツを参照してください。
WordPressの投稿IDやカテゴリーIDなど各種IDの調べ方

複数のカテゴリーページにBasic認証を設定したい場合は、前述したコードの赤文字部分を次のように変更します。

if(is_category(array('カテゴリーID', 'カテゴリーID', 'カテゴリーID'))):

【’カテゴリーID’】を【,】で区切って複数指定してやります。
一番最後に【,】をつけると、正常に動作しませんので注意してください。

特定のタグページにベーシック認証を設定する方法

特定のタグページにBasic認証を設定したい場合は、以下のように記述します。

<?php
if(!is_home()):
if(is_tag('タグID')):
$userArray = array(
"admin" => "12345"
);
basic_auth($userArray);
endif;
endif;
?>

【タグID】の部分に、Basic認証を設定したい【タグID】を記述してください。

タグIDの調べ方は、以下のコンテンツを参照してください。
WordPressの投稿IDやカテゴリーIDなど各種IDの調べ方

複数のタグページにBasic認証を設定したい場合は、前述したコードの赤文字部分を次のように変更します。

if(is_tag(array('タグID', 'タグID', 'タグID'))):

【’タグID’】を【,】で区切って複数指定してやります。
一番最後に【,】をつけると、正常に動作しませんので注意してください。

特定のカスタム投稿にベーシック認証を設定する方法

特定のカスタム投稿にBasic認証を設定したい場合は、以下のように記述します。

<?php
if(!is_home()):
if(get_post_type() === 'カスタム投稿名'):
$userArray = array(
"admin" => "12345"
);
basic_auth($userArray);
endif;
endif;
?>

【カスタム投稿名】の部分に、Basic認証を設定したい【カスタム投稿名】を記述してください。

カスタム投稿名IDの調べ方は、以下のコンテンツを参照してください。
カスタム投稿名とカスタムタクソノミー名の調べ方

まとめ

WordPressの特定のページにBasic認証を設定する方法を紹介しました。

  1. functions.phpにコードを追加する。
  2. header.phpにコードを追加する。
  3. Basic認証を設定するページを定義する。
  4. 認証用のユーザー名とパスワードを設定する。
  5. Basic認証が正常に動作しているか確認する。

5ステップで、簡単に特定のページにだけBasic認証を設定することができます。
興味のある方は、試してみてください。

Wordpressサイトのカスタマイズで
お困りではありませんか?

あなたのWordpressサイトを、ご希望に沿ってカスタマイズいたします。
次に該当する方は、お気軽にご相談下さい。

  • Wordpressサイトをカスタマイズしたいが、やり方が分からないで困っている。カスタマイズの知識が豊富な人に任せたい。
  • Wordpressサイトをカスタマイズしたいが、自分でカスタマイズする暇がない。カスタマイズが得意な人に丸投げしたい。
  • Wordpressサイトをカスタマイズしてみたが、上手くカスタマイズできなかった。カスタマイズ経験が豊富な人に任せたい。
  • Wordpressサイトをカスタマイズしてみたら、バグが発生して困っている。正常に動作するように正しくカスタマイズしてほしい。

一つでも該当する方は、以下のリンクからチェックしてみてください。

詳細を確認する


著者:takaya kondo

岡山在住のWordPress専門フリーランサーです。Wordpressを使ったWEBサイト制作を中心に10年間ほど活動させていただいています。

Wordpress関連の記事でお役に立てれば幸いです。

【関連記事】あなたが興味のありそうな関連記事をご紹介します。

コメントを残す

(必須)

CAPTCHA