ユニシンク/開発ブログ

Category : WordPress

WordPressの固定ページでBasic認証を使う

以前の案件で、「Wordpressで作ったコーポレートサイトの「会員ページ」のみIDとパスワードを付けたい」というお話をいただきました。

CMSを使わないサイトやWordpress全体にBasic認証をかけるのは簡単なので、これも簡単な案件と思っていましたが、とても苦労したので私同様、苦労する人が出ないよう今回はそのやり方をご紹介します。

私は先の案件ではロリポップサーバーを使用したので、今回もロリポップサーバー使いご紹介します。

 

通常のやり方ではWordpressの固定ページのみにBasic認証はかけられない

WordPressには「パスワード保護」機能や、Wordpress全体にBasic認証をかけるプラグイン「WP Basic Auth」などがありますが、前者は投稿にしか使用できませんし、後者はサイト全体にしかかけられません。

レンタルサーバーの機能で、特定ディレクトリにBasic認証をかける機能がよくありますが、Wordpressで生成する特定ディレクトリには使用できません。

 


 

下準備:PHPを「モジュール版」にする

これからご紹介する方法はCGI版のPHPでは使えません。

もしモジュール版に出来ない事情がある方はCGI版で動作させる方法を紹介しているウェブサイトもいくつかあるようなのでそちらを参考にしてみてください。(ちなみに私のケースではCGI版のPHPではどうしても動作しませんでした。なので当ブログでのそれらの記事のご紹介は控えさせていただきます)

モジュール版への変更は簡単です。ロリポップサーバー管理画面のPHP設定からモジュール版を選んでください。

但し、ロリポップや、さくらインターネット等のレンタルサーバーではモジュール版を使うにはいくつか条件がありますのでご注意を。

(低額プランだとモジュール版をサポートしていない等)

 


 

手順1 テーマ内のfunctions.phpに関数を記述

Basic認証をかけるための関数をfunctions.phpに記述します。


function basic_auth($auth_list,$realm="Restricted Area",$failed_text="IDまたはパスワードが違います"){ 
    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);
}

 


 

手順2 header.phpの先頭、もしくはページの先頭に来る部分にコードを記述する


<?php 
if(!is_home()): 
if(is_page(array(10))): //Basic認証を行うページID 
$userArray = array( "username1" => "password1" );
basic_auth($userArray); 
endif;
endif;
?>

 

固定ページのIDはWordpress固定ページ編集画面のURLにある数字です。

 

以下のように配列を使えばBasic認証を行いたい固定ページを複数指定することが可能です。
また、IDとパスワードも複数設定することが可能です。


<?php 
if(!is_home()): 
if(is_page(array(10 , 99))): //Basic認証を行うページID 
$userArray = array( "username1" => "password1" , "username2" => "password2" , "username3" => "password3" );
basic_auth($userArray); 
endif;
endif;
?>

広告 :

風俗顧客管理システム阿修羅

Unithink

ウェブ制作、グラフィックデザイン、広告制作のユニシンク。
価値のあるウェブサイトを制作し、集客UP、売上UPを目指します。

Copyright © 2019 Unithink All Rights Reserved.