WordPressで特定の固定ページやカテゴリーにBasic認証をかける方法

サイト内の特定のページやディレクトリにBasic認証をかける場合、.htaccessを使って実装するのが一般的です。

 WordPress(ワードプレス)のイメージ

しかし、WordPressのページにはディレクトリという概念がないため、特定のページにだけ認証をかけるということができません(サイト全体は可能)。

今回はWordPressで特定の固定ページやカテゴリーにBasic認証をかける方法について解説します。

固定ページにBasic認証をかける場合

実装自体はそれほど難しくありませんので、順を追って説明します。

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に下記の記述をします。

<?php
if(!is_home()): 
if(is_page('1,2,3')): //Basic認証をかけたいページのID 
$userArray = array(
    "admin" => "password"
);
basic_auth($userArray); 
endif;
endif;
?>

「admin」「password」の部分は、Basic認証のダイアログで入力する「ユーザー名」と「パスワード」を入力。これだけでOKです。

「ユーザー名」と「パスワード」は、増やすことも可能です。

$userArray = array(
    "admin1" => "password1",
    "admin2" => "password2",
);

カテゴリーページにBasic認証をかける場合

カテゴリーページにBasic認証をかけたい場合は、is_pageをis_categoryに変えてIDを指定します。

<?php
if(!is_home()): 
if(is_category('1')) :  //Basic認証をかけたいカテゴリIDを指定
$userArray = array(
    "admin" => "password"
);
basic_auth($userArray); 
endif;
endif;
?>

カスタム投稿タイプのページにBasic認証をかける場合

カスタム投稿タイプのページにBasic認証をかけたい場合は、get_post_typeを使って投稿タイプ名を指定します。

<?php
if(!is_home()): 
if(get_post_type() === 'event'): //Basic認証をかけたい投稿タイプ名
$userArray = array(
    "admin" => "password"
);
basic_auth($userArray); 
endif;
endif;
?>

参考サイト:カテゴリーページや固定ページ等でBasic認証を利用する

Related Posts