バックアップサイト、開発中のテスト環境、または限定公開したい会員向けページなど、「WordPressのログイン機能を使うほどじゃないけど、外部からはアクセスさせたくない」
そんなときに便利なのが Basic認証 です。
今回は、.htaccess を使わずに、functions.phpに書くコードだけでサイト全体にBasic認証をかける方法を紹介します!
そもそもBasic認証って?
画像のように、サイトにアクセスしたときに、ブラウザのポップアップでユーザー名とパスワードを聞いてくる、あの仕組みです。
サーバーレベルでかけることも多いですが、WordPressのコードで制御することも可能です。
| こんなときに便利 |
|
コードを実装してみる
functions.php もしくは「Code Snippets」などのプラグインに、以下のコードを追加します
function custom_login_protection() {
if (!is_user_logged_in()) { // WordPressログイン済みなら除外
$username = '【ユーザー名】'; // ← ここに任意のユーザー名を入力
$password = '【パスワード】'; // ← ここに任意のパスワードを入力
if (
!isset($_SERVER['PHP_AUTH_USER']) ||
!isset($_SERVER['PHP_AUTH_PW']) ||
$_SERVER['PHP_AUTH_USER'] !== $username ||
$_SERVER['PHP_AUTH_PW'] !== $password
) {
header('WWW-Authenticate: Basic realm="Restricted Area"');
header('HTTP/1.0 401 Unauthorized');
echo 'このサイトを見るには認証が必要です。';
exit;
}
}
}
add_action('template_redirect', 'custom_login_protection');
上記のコードの
【ユーザー名】 と 【パスワード】 の部分には、任意の英数字の文字列を入力してください。
例)
$username = 'user';
$password = 'abc123';
ポイント
- is_user_logged_in() を使っているので、WordPressにログイン済みの場合には認証を求めません。
- ユーザー名とパスワードは、適宜変更して使用してください。
- template_redirect フックを使っているので、すべてのフロントエンドページに適用されます。
- 管理画面(/wp-admin/)やAPIには影響ありません。
.htaccess との違い・使い分け
| 方法 | 特徴 | 向いてるケース |
| .htaccess | サーバー側で直接制御、ログイン中でも必須 | HTMLなどWP以外のファイルも守りたいとき |
| functions.php | WPが動いているときだけ有効、WPログイン中は回避 | テスト環境・確認用など柔らかく守りたいとき |
「パスワードを共有して一時的に見せたい」ならfunctions.php(スニペットでの入れ込み)が手軽でおすすめです。
まとめ
- パスワードは公開されてもいい前提で使いましょう(超機密性の高い内容には向きません)
- サイトにログインしてる人には表示されないため、用途に応じて is_user_logged_in() を外してもOK
- 公開はちょっと困るけど、ユーザー登録まではしなくていい
- 簡易的なメンバー専用ページなどをつくりたい
- サイト全体に簡易的なパスワードを設置したい
そんな時に使えるのが、このBasic認証です。
また、必要な時に簡単に追加して、必要性がなくなった際には、サッと外せるのが便利です。
WordPressサイトのゆるめの非公開対応として、使ってみてください。