WordPress

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

Basic認証を設定するためには通常物理的なフォルダ(ディレクトリ)が必要ですが、特定のページ下部はBasic認証にしたいという相談を受けて試行錯誤した覚書。

前提

たとえばhttps://example.com/archives/記事のパーマリンク というような記事を投稿していて、https://example.com/archives/以下のページはユーザー名とパスワードを知っている人だけログインできるようにしたい、という感じ。

特定のカテゴリのみBasic認証をかけたいというようなイメージです。

ユーザー名とパスワードはWordPressの各ユーザー登録したIDとパスワードじゃなくて、閲覧できる人たちが共有で使う、本当に閲覧のためだけのものです。

編集するファイル

今回はwp-config.phpとfunctions.phpを使用した。

wp-config.php

//basic認証
define('BASIC_AUTH_USER', 'ユーザー名');
define('BASIC_AUTH_PASS', 'パスワード');

ここで設定したユーザー名とパスワードを認証に使う。

functions.php

function custom_basic_auth_protection() {
    // 保護するURLのパス("archives/"以下を対象にする)
    if (strpos($_SERVER['REQUEST_URI'], '/archives/') === false) {
        return; // archives/ 以外は認証不要
    }
    // ユーザー名・パスワードの設定(固定値)
	$valid_username = BASIC_AUTH_USER;
	$valid_password = BASIC_AUTH_PASS;
    // Basic認証のデータが送られているかチェック
    if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW']) ||
        $_SERVER['PHP_AUTH_USER'] !== $valid_username || $_SERVER['PHP_AUTH_PW'] !== $valid_password) {
        
        // 認証失敗 → 認証ダイアログを表示
        header('WWW-Authenticate: Basic realm="Restricted Area"');
        header('HTTP/1.0 401 Unauthorized');
        echo '認証が必要です。';
        exit;
    }
}

// WordPressのフックに登録
add_action('template_redirect', 'custom_basic_auth_protection');

archives以外にしたい場合は、strpos($_SERVER['REQUEST_URI'], '/archives/') === falseのところを変更する。

  • この記事を書いた人

ゆず

■忘れないように自分の覚書と、誰かも困っているかもしれないので参考になればいいなくらいの軽い備忘録です。
■サイト運営費のためGoogleAdsenseをいれています。
gifteeを贈る / コーヒーをおごる / mail

1

outlookを最小化すると勝手に終了してしまうと相談されたけど実はそれ勝手に閉じてるわけじゃなくて、おそらく「最小化時にアイコン化する設定」になってるんや・・・。 outlookの最小化時の設定を変 ...

2

前提 自分用ブックマークサイトとして使用しているてがろぐに、いいねボタンをつけようという狙いです。なので、てがろぐのセットアップは終了し稼働しているものとします。 配布ページのマニュアルを参考に進めま ...

3

感想をもっと手軽に、お気軽に。 https://labo.01kawa.com/kansou 素敵なフォロー、フォロワー、創作作家さんに作品の感想を送りたい…!が、語彙力がないという方向けの感想メーカ ...

-WordPress
-