ガラ

ここからはじめよう

2019.07.03
WordPress

WordPressで特定のカテゴリにベーシック認証をかける

指定カテゴリの一覧とシングルページにベーシック認証がかかります。

編集するファイルは

header.php

function.php

そして、サーバーによっては

.htaccess

です。

 

header.php

header.phpの一番上に下記を追加します。

カテゴリーIDのところにベーシック認証をかけたいカテゴリのIDを入れてください。

<?php
if(!is_home()): 
if(in_category('カテゴリID') ):
$userArray = array("admin" => "password"
);
basic_auth($userArray); 
endif;
endif;
?>

※if(in_category(‘カテゴリID’) ):がif(is_category(‘カテゴリID’) ):になっているとシングルページにベーシック認証がかかりません。

 

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

 

.htaccess

phpがセーフモード(CGI版)で動作しているサーバーの場合は、phpでのBasic認証が行えないのでheader.phpとfunction.phpだけの編集だとはじかれてしまいます。

 

そのため下記をWordPress用の.htaccessに追加してください。

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

 

入れる場所はこちらです。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP:Authorization} ^(.*) 
RewriteRule ^(.*) - [E=HTTP_AUTHORIZATION:%1]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

# END WordPress

 

お勧めの記事

過去の記事