Contact us
   Blog

Blog

WordPressで特定のカテゴリーにだけパスワード制限を設けたい(その1)

WordPressには標準で、記事のパスワードロック機能が付いていますが、記事単位ではなくて、カテゴリー単位で制御したい時がありますよね。
会員にのみ公開したい記事が、複数ある時や、文書を配布したい時など、カテゴリー単位でパスワードをかけたいと思う場面は多いと思います。

しかしながら、そもそもWordPressのカテゴリーには、フォルダが存在しません。 カテゴリーというグループがまるであるかのように、URLをシミュレートしているだけです。

パスワードロックが正常に動くようにするために、ロックするカテゴリーの記事は、複数のカテゴリーにまたがっていたりしないように配慮しましょう。

《その1》PHPの条件分岐を使ってBasic認証をかける

まず、パスワードロックするカテゴリーを作ります、作成したらそのカテゴリーIDをメモしておいてください。

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

header.phpにソースを追記

次に、特定のカテゴリーの時だけ、パスワードロックをしたいので、その条件分岐をheader.phpに追加します。

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

数字がカテゴリーIDです。ユーザーIDとパスワードは好きなものに変更してください。

.htaccessにソースを追記

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

これで完了です。制限をかけたカテゴリーにアクセスしてみて、IDとパスワードを要求されたら、成功です。


Follow me

WEBの企画と制作の流れ

WEB制作は リサーチとデザインと実装。リサーチや企画といった 情報を取り扱う工程。 そして、それを元にデザインする工程。デザインしたものを実装する工程。 中でも企画検討といった部分は上流工程と呼ばれ、独立して扱われることもあります。WEBサイトを作る際の思考法やブランディングのために必要なこと。知っておいて欲しい制作の知識や受発注の心得などをまとめました。

future

いきなり完成したものを作って納品するのではなく、徐々に積み上げてゆくように、側でクライアントを支えながら完成させてゆく新しいスタイルの制作です。

lalan with you