WordPressで特定ページにBasic認証をかける方法。functions.phpの使い方

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

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

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

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

固定ページにBasic認証をかける方法

WordPressで特定の固定ページにBasic認証をかけるのは少し工夫が必要ですが、実装自体はそれほど難しくありません。以下の手順で実装できます。

functions.phpに記述する

まずは、テーマのfunctions.phpに以下のコードを追加します。この関数はBasic認証のロジックを定義しています。

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

この関数は、ユーザー名とパスワードをチェックし、正しい場合にのみページにアクセスを許可します。認証に失敗した場合は、401エラーを返します。

header.phpに認証処理を追加する

次に、header.phpに以下のコードを追加します。このコードは、特定のページにのみBasic認証を適用するためのものです。

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

ここで、ページIDが「1, 2, 3」の固定ページに対してBasic認証がかかるようになっています。ユーザー名とパスワードは「admin」「password」として設定されていますが、必要に応じてこれらを変更できます。

複数ユーザーでのBasic認証

もし、複数のユーザー名とパスワードを設定したい場合は、次のように$userArrayを拡張します。

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

これにより、複数のユーザーが異なるパスワードで認証を通過できるようになります。

カテゴリーページにBasic認証をかける方法

特定のカテゴリーに属する投稿ページ全体にBasic認証をかけることも可能です。その場合は、is_pageの代わりにis_categoryを使います。

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

このコードでは、カテゴリID「1」に属するページに対してBasic認証がかかるように設定されています。

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

カスタム投稿タイプに対してもBasic認証を設定することができます。get_post_type関数を使用して、特定の投稿タイプに対してBasic認証を設定します。

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

このコードは、投稿タイプ「event」に対してBasic認証を設定する例です。

Basic認証をかけるときの注意点

Basic認証は簡単に設定でき、ページのセキュリティを強化するのに役立ちますが、いくつか注意点があります。

  • Basic認証は、ユーザー名とパスワードが平文で送信されるため、SSL(https)を使用していないと、セキュリティ上のリスクがあります。重要なページには、必ずSSLを併用することを推奨します。
  • 認証情報を変更したい場合、functions.phpのコードを直接編集する必要があります。そのため、WordPressの管理画面から認証情報を管理できるようにするプラグインなどを導入することも一案です。
  • Basic認証を設定することで、SEOに影響が出る可能性があります。検索エンジンが認証を通過できないため、そのページがインデックスされなくなる可能性があります。インデックスされて欲しいページには、Basic認証を設定しないほうがよいでしょう。

まとめ:WordPressで特定ページにBasic認証を設定する方法

WordPressで特定の固定ページやカテゴリー、カスタム投稿タイプにBasic認証を設定する方法について解説しました。

functions.phpとheader.phpを適切に編集することで、簡単にページごとの認証を実現できます。ただし、Basic認証を設定する際にはセキュリティとSEOへの影響を考慮することが重要です。

今回の方法を参考に、必要なページにだけ適切な認証を設定し、セキュリティを強化しましょう。

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