ウェベン!

【WP】functions.phpの記述でベーシック認証をかける方法

ベーシック認証って、
.haccessに記述して.htpasswdファイルと用意して、
パスワードは暗号化してと意外にやることが多い。

「今はまだ見られたくない」など一時的だったり、
「重大ではないけど知ってる人にだけ見せたい」など簡易的な状況でしか使わないので、
もっと簡単にできないかなーと思っていたのですが、
functions.phpの記述でできるようです。

この方法であれば、
特定のページにのみベーシック認証をかけたい時にも使えます。

ベーシック認証のかけ方

01. 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の一番下(「?>」があればその上)にでも追記してください。

「認証に失敗~入力してください。」はIDやPASSを間違えたときに表示される文言です。
必要であれば、変更してください。

02. header.phpへ記述

▼ header.php

<?php
  if(!is_home()): 
  if(is_page('work')): 
  $userArray = array("admin" => "password");
  basic_auth($userArray); 
  endif;
  endif;
?>

header.phpでどこのページに適用するかと、ID・PASSを設定します。
header.phpの一番上(1行目)に追記します。

どこのページに適用するか

3行目の「is_page(‘work’)」の部分です。
この場合だとworkというスラッグのページに適用されます。

ここの条件分岐タグを、ベーシック認証をかけたいページに合わせて変えてください。

条件分岐タグはこちらを参考にしてください。
条件分岐タグ – WordPress Codex 日本語版

ID・PASSの設定

4行目の「”admin” => “password”」の部分です。

adminを好きなIDに、passwordを好きなパスワードに変更してください。

複数設定したい場合は「,」で区切ってあげて必要なぶんだけ記述します。

$userArray = array(
	"admin01" => "password01",
	"admin02" => "password02"
);

これだけでベーシック認証は完了です。

「Advanced Custom Fields」と組み合わせて管理画面からID・PASSを変更できるように設定することも可能です。

キーワード: