フリーランス|WEB 制作経験丸7年、制作会社様からのご依頼に丁寧・高クオリティでお手伝いいたします。 IRODORI DESIGN

B L O G

【解説】特定のページにBasic認証を設定する方法

Basic認証
WordPress

一部のページだけは限られた人だけに公開したいというページはありませんか?
そんな時に特定のページにBasic認証を設定する方法があります。

今回の記事では特定のページにBasic認証を設定する方法をご紹介したいと思います。

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

特定のページにBasic認証を設定する場合、大まかな流れはこのようになっています。

  • ①functions.phpにコードを記述
  • ②header.phpにコードを記述

functions.phpにコードを記述

WordPressの特定のページにBasic認証を設定する場合、まず最初に以下コードを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);
}

このコードがBasic認証を制御しています。

このコードはサイトごとに変更する必要はありません。
コピーして貼り付けたらfunctions.phpでの作業は完了です。

header.phpにコードを記述

続いてheader.pnpの一番上に以下コードを記述します。この記述よりも上に他の記述があると正しく動作しない可能性があります。

<?php
if(!is_home()):
    if(is_page('●●●')):
        $userArray = array(
            "■■■" => "▲▲▲"
        );
        basic_auth($userArray);
    endif;
endif;
?>

上のコードではスラッグ名が「●●●」の場合、Basic認証の対象ページとなる設定です。
そして、このBasic認証のユーザー名が「■■■」でパスワードが「▲▲▲」となっています。

「●●●」の部分は、「スラッグ名」「ID」または「タイトル」を指定することが出来ます。

例えば、スラッグ名が「company」、ユーザー名「user」でパスワード「123456」の場合は以下のように設定します。

<?php
if(!is_home()):
    if(is_page('company')):
        $userArray = array(
            "user" => "123456"
        );
        basic_auth($userArray);
    endif;
endif;
?>

ここまでの作業で正しく設定出来ていればBasic認証が表示されます。

パターン別のコード

Basic認証の設定方法の次は、色々なパターンを想定してページを指定する方法をご紹介します。

特定の固定ページにBasic認証を設定

特定の固定ページを指定する場合、WordPressの独自関数のis_page()を使用します。

if(is_page('●●●')):

endif;

「●●●」の部分は、「スラッグ名」「ID」または「タイトル」を指定します。

これをheader.phpに記述するコードに反映させると以下のようになります。

<?php
if(!is_home()):
    if(is_page('●●●')):
        $userArray = array(
            "■■■" => "▲▲▲"
        );
        basic_auth($userArray);
    endif;
endif;
?>

複数の固定ページに設定する場合

複数の固定ページを指定する場合、以下のように記述します。

if(is_single('●●●') || is_single('●●〇') || is_single('●〇●')):

endif;

もう少しスマートに書く場合はarray()を使います。

if(is_page(array('●●●','●●〇','●〇●'))):

endif;

これをheader.phpに記述するコードに反映させると以下のようになります。

<?php
if(!is_home()):
    if(is_page(array('●●●','●●〇','●〇●'))):
        $userArray = array(
            "■■■" => "▲▲▲"
        );
        basic_auth($userArray);
    endif;
endif;
?>

特定の投稿ページにBasic認証を設定

特定の投稿ページを指定する場合、WordPressの独自関数のis_single()を使用します。

if(is_single('〇〇〇')):

endif;

「〇〇〇」の部分は、「スラッグ名」「ID」または「タイトル」を指定します。

これをheader.phpに記述するコードに反映させると以下のようになります。

<?php
if(!is_home()):
    if(is_single('〇〇〇')):
        $userArray = array(
            "■■■" => "▲▲▲"
        );
        basic_auth($userArray);
    endif;
endif;
?>

複数の投稿ページに設定する場合

複数の投稿ページを指定する場合、以下のように記述します。

if(is_single('〇〇〇') || is_single('〇〇●') || is_single('〇●〇')):

endif;

固定ページ同様、もう少しスマートに書く場合はarray()を使います。

if(is_single(array('〇〇〇','〇〇●','〇●〇'))):

endif;

これをheader.phpに記述するコードに反映させると以下のようになります。

<?php
if(!is_home()):
    if(is_single(array('〇〇〇','〇〇●','〇●〇'))):
        $userArray = array(
            "■■■" => "▲▲▲"
        );
        basic_auth($userArray);
    endif;
endif;
?>

複雑にページを指定しBasic認証を設定

上の例では固定ページだけ、投稿ページだけのような場合をご紹介しましたが、続いてご紹介するのは、固定ページと投稿ページを織り交ぜた指定の記述方法です。

具体的には以下のように記述します。

if(is_page(array('●●●','●〇●','〇●〇')) || is_single(array('〇〇〇','〇〇●','〇●〇'))):

endif;

これをheader.phpに記述するコードに反映させると以下のようになります。

<?php
if(!is_home()):
    if(is_page(array('●●●','●〇●','〇●〇')) || is_single(array('〇〇〇','〇〇●','〇●〇'))):
        $userArray = array(
            "■■■" => "▲▲▲"
        );
        basic_auth($userArray);
    endif;
endif;
?>

その他の分岐について

固定ページや投稿ページの他にもアーカイブページやカテゴリーページ等、WordPressには様々な条件分岐を指定することが出来ます。
詳しくは以下記事を参考にしてみて下さい。

まとめ

いかがでしたか?
簡単にWordPressの特定のページにBasic認証を設定する事が出来ます。
一部の人にしか見られたくないページなどはこのようにBasic認証を導入してみて下さいね。