Site Overlay

WordPressで特定のページにBASIC認証を付ける方法

最近はすっかりWordPressを使ってホームページを作る機会が増えてきましたが、まだまだ謎な部分というか、苦手な部分が多くあるので、お客さんから「こんなんしたい。」という要望が来ると、ドキドキしてしまいます。
でも、そういう要望が自分の技術を高めてくれるんだ!と前向きにとらえて、日々精進しています。

そんなある日お客さんから、「IDをパスワードを入力した人だけが見れる、資料をダウンロードできるページを作ってほしい。」という要望がありました。

要は、「BASIC認証をつけたページを作ってね。」という事なんですが、HTMLでホームページを作っていた時だったら「.htaccessを作ったらいけるな。」と思ったんですけど、「今回ワードプレスで果たしてそんなことが出来るのか?これはピンチじゃないのか?」という不安が頭の中を駆け巡りました。

とりあえず、プラグインで何かいい方法がないかな?と探し出したんですけど、どうもこれっていうものが見つからず、ネットで調べる事3時間。
ようやくこれは使えそうだ!という方法に巡り合えましたので、とりあえずここに書き記しておきます。

私のようなwordpress素人でも出来る方法なので、困った人はぜひ真似してください。

①functions.phpにコードを追加する

不具合が出てらどうしよ?と思うので、余り触りたくないfunctions.phpですが、ここは勇気をもって触ります。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);
}

何が書かれているのか全く意味不明ですが、とりあえずそのまま全てコピーして、functions.phpの一番下にペーストします。

②header.phpにコードを追加する

functions.phpだけでも触るのドキドキするのに、今度はheader.phpも触るだと!!

これは素人の私にとってはやんごとなきことですが、勇気をもってheader.phpを開きます。(当然事前にコピーはとっておきましょう。)
header.phpの一番上に以下のコードをペーストします。

header.phpにタグを追加する場所は、一番上なので間違えないように!

<?php
if(!is_home()):
if(is_page('★')):
$userArray = array(
"●●●●" => "◆◆◆◆"
);
basic_auth($userArray);
endif;
endif;
?>

ここまではコピペするだけなので、たぶん誰でもできると思います。
次に、BASIC認証を付けたいページを決めるのと、IDとパスワードを設定していきます。ここからは簡単です!

③WordPressで作ったページのページIDを調べる

どのページをBASIC認証の対象ページにするのかを決めないといけません。WordPressでは、固定ページやと投稿ページにIDというものが割り振られています。

ページID??そんなもんどこに書いてるんや??

と、初耳の人も安心してください。画面では見えませんが、コードを見ればちゃんと書かれています。
ページIDは<body>タグの中に、【postid-●●】というような感じで書かれていて、黒丸部分がIDの数字になります。

●投稿ページの場合は、postid-●●
●固定ページの場合は、page-id-●●

というような記述になっています。

④先ほどコピーしたタグの中の★にIDを入れる

header.phpの一番上にコピーしたタグの中にある、★の中にIDの数字を入れます。
例えば、IDが548だった場合は、以下の様にコピーします。

<?php
if(!is_home()):
if(is_page('548')):
$userArray = array(
"●●●●" => "◆◆◆◆"
);
basic_auth($userArray);
endif;
endif;
?>

簡単簡単!!あと少しで完成です!!!

⑤●●と◆◆にIDとパスワードを入力する

引き続き、header.phpの中にある、●●●●と◆◆◆◆に、IDとパスワードを入力します。例として作っていますので、4文字以上でも全然大丈夫です。

例えば、IDを【onakahetta】、パスワードを【gyozatabetai】にした場合は、以下の様に入力します。

<?php
if(!is_home()):
if(is_page('548')):
$userArray = array(
"onakahetta" => "gyozatabetai"
);
basic_auth($userArray);
endif;
endif;
?>

はい、これで保存して完成です!!!

どうでしょうか?無事指定したページにBASIC認証はかかりましたでしょうか??
phpのコードについては、私自身何が書かれているのか分かりませんので、問い合わせてもらっても答えることは出来ません!!すいません!!!

でも、この方法で初心者の私でも出来たので、きっと他の方も行けるんじゃないかなと思います!

Scroll UpScroll Up