mozmoz

| ウェブのあれこれ中心のブログです

特定のカスタム投稿だけにBasic認証をかける方法

2020年11月24日

カスタム投稿だけにBasic認証をかける方法をご紹介。
例えば一部の人にだけ実績を公開したいときなどに使えます。

編集するファイルは下記2つ(場合により3つ)。
・function.php
・header.php
・.htaccess(PHPがセーフモードの時)
※作業前には必ずバックアップをとりましょう。

function.phpの記述

function.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);
}

header.phpの記述

テーマヘッダー内に記述。
カスタム投稿だけ別のheader.phpを読んでいる場合は、そっちに記述します。
カスタム投稿タイプ名は、Basic認証をかけたいカスタム投稿名を記載してください。
“admin” => “password”ここで、ログインIDとパスワードを指定します。

if(!is_home()):
if(get_post_type() === 'カスタム投稿タイプ名'):
$userArray = array("admin" => "password"); basic_auth($userArray); endif; endif;

.htaccessの記述(PHPがセーフモードの時)

PHPがセーフモードの際は、.htaccessファイルに下記記述を追加します。

RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*)
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]

これで特定のカスタム投稿にBasic認証がかかります!
いじるファイルはWordpressの重要なファイルばかりなので、作業前にはバックアップを必ず取るようにしましょう!