バックアップサイト、開発中のテスト環境、または限定公開したい会員向けページなど、「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サイトのゆるめの非公開対応として、使ってみてください。