特定のページにBasic認証を設定する手順
特定のページにBasic認証を設定する手順を見ていきましょう。
手順は全部で5ステップです。
- functions.phpにコードを追加する。
- header.phpにコードを追加する。
- Basic認証を設定するページを定義する。
- 認証用のユーザー名とパスワードを設定する。
- 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認証を設定する方法を紹介しました。
- functions.phpにコードを追加する。
- header.phpにコードを追加する。
- Basic認証を設定するページを定義する。
- 認証用のユーザー名とパスワードを設定する。
- Basic認証が正常に動作しているか確認する。
5ステップで、簡単に特定のページにだけBasic認証を設定することができます。
興味のある方は、試してみてください。
コメントを残す