ユーザーにとって価値ある情報を繰り返し発信していく「まるログ」

プラグインなしで特定カテゴリーにベーシック認証を【WordPress】

WordPress
ベーシック認証WordPressで「特定のカテゴリーにベーシック認証をかけたい」とご要望をいただくことがあります。
例えば、メルマガ会員だけに見せたい記事があるときなどに使用します。
プラグインを使えばいい!と言う声もあるかと思いますが、プラグインは必要以上に導入しないほうが安全です。

プラグイン導入を最低限に

読み込み時間理由1:サイトが重くなる

使いすぎるとサイトが重くなり、ページの読み込みに時間がかかります。
読み込み時間が長いとせっかく良い記事を書いてもユーザーが離れる原因となります。

理由2:相互性がなくなる可能性

WordPressは頻繁にバージョンアップが行われます。
そのため、バージョンアップの際にプラグインが対応しなくなる可能性があるのです。

理由3:コンフリクトの可能性

たくさんプラグインを使用すると他のプラグインとコンフリクトを起こし正常に動作しなくなることがあります。

カテゴリーにベーシック認証をかける

WordPressやってみようプラグインを使わずに済むのであればやってしまおう!!ということで今回はプラグインなしでご紹介いたします。
方法は以下の設定をするだけでとても簡単です。

ベーシック認証を掛けるための関数
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の一番上に記述


<?php if(!is_home()): if(is_category(‘1’)) : //Basic認証を掛けたいカテゴリーID $userArray = array("admin" => "password" //IDとパスワードは変更可能
);
basic_auth($userArray); 
endif;
endif;
?>

以上でベーシック認証をかけることができます。

しかし、セーフモード(CGI版)で動作しているサーバーはこのままだと正常に動きません。テストサーバーでは動いたのに本番にあげたら動かなかったという方はここが落とし穴です!
※セーフモード(CGI版)とは
Webサーバー(Apache)内でphpの処理が必要となるたびにphpが起動し、処理するサーバーのこと。

その場合はWordPressフォルダ直下にある.htaccessのリライトルール内上部に以下を追加してあげてください。


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

それでもできない場合は…?

エラーサーバーの状況によってはこの方法で出来ない場合があるかもしれません…
私もその一人でした。何を試してもできない!!という方にはこの方法をご紹介いたします。
少しアナログ的ではありますが、確実な方法です。
※この方法はパーマリンクの設定を変更します。記事をすでに複数書いて運営している方はサイトに支障が出る可能性があります。

1.パーマリンクの設定

管理画面>設定>パーマリンク設定からカスタム構造を選択します。

WordPress操作画面


/%category%/%postname%/

このコードを入れるとカテゴリーのページが以下のようなURLになります。
http://ドメイン/category/カテゴリースラッグ名/

2.フォルダを作成

WordPressフォルダの直下にURLと同じ「category」というフォルダを作成します。
その中にさらにカテゴリースラッグ名のフォルダを作成します。

3.認証の設定

WordPressフォルダ直下にあるindex.phpと.htaccessをコピーして、カテゴリースラッグ名のフォルダに入れます。
データは以下のように書き換えてください。

index.php
/wp-blog-header.phpを以下に修正(階層の深さに合わせて適宜変更してください)


require( dirname( __FILE__ ) . ‘/../../wp-blog-header.php' );

.htaccess
ベーシック認証の記述に書き換える


AuthType Basic
AuthName "Input your ID and Password."
AuthUserFile /home/ドメイン名/category/カテゴリースラッグ名/.htpasswd
require valid-user

4. .htpasswdを同じフォルダに追加

.htaccesswdにIDとパスワードを記述して同じフォルダに入れてください。


(ID):(暗号化したpassword)

パスワードの暗号化はこちらからできます。
http://orange-factory.com/tool/crypt.cgi

まとめ

簡単にできるいかがでしたでしょうか。
無理そうだからとすぐにプラグインを使わなくても簡単にベーシック認証をかけることが出来ます。
クライアントの要望に答えながらもサイトのことを考えて構築を進めていくことも大切です!

WEBデザイナー / U.H