WordPressで特定のページにのみベーシック認証をかけたい時ってありませんか?
全体にかけるプラグインはありますが、特定ページだと見当たらなかったりします。
今回はベーシック認証をかけて、管理画面からでも簡単に設定できる方法をご紹介します。
ベーシック認証のかけ方
①function.phpにコードを記述する
まずは以下のコードをfunction.phpに記述してアップください。『認証に失敗しました。~』のテキストは自由に変更できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
//ベーシック認証 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に以下のコードを記述してアップします。
1 2 3 4 5 6 7 8 |
<?php if(!is_home()): if(is_page('members')): $userArray = array("admin" => "password"); basic_auth($userArray); endif; endif; ?> |
今回の記述は3行目部分で固定ページ内の『members』というスラッグを持っている記事を対象にしています。
この部分をカテゴリーにしたいときは
1 |
if(is_category('カテゴリーID')) : |
カスタム投稿タイプにしたい場合は
1 |
if(get_post_type() === 'カスタム投稿名'): |
などに変更してみてください。wpの通常の出し分けの記述で対応できるかと思います。
また、『admin』部分はID、『password』部分はパスワードを自由に入力してください。
以下のように記述すると、複数設定も可能です。
1 2 3 4 |
$userArray = array( "admin01" => "password01", "admin02" => "password02" ); |
これで通常のベーシック認証の設定は完了です。
【応用】管理画面からIDとパスワードを設定できるようにする
普通にベーシック認証をかける分には上記までの対応で問題ないのですが、もし運用していく人がソースコードを触れないという場合などにはWPの管理画面でIDとパスワードを設定できるようになると便利です。今回はカスタムフィールドを使用します。カスタムフィールド部分はある程度分かっている方向けにざっくりと説明します。
————
今回は『Advanced Custom Fields』を使ってカスタムフィールドを作っていきます。
とりあえず新規追加でIDとパスワードを入力できるエリアを作成します。
■ラベル・フィールド名・デフォルト値→任意のもの
■フィールドタイプはテキスト
■必須は「はい」
■説明は必要であれば入力
で設定してください。
『位置』については全ページに表示されるとややこしいので、今回ベーシック認証をかけるページを選択してください。
これで問題なければ『公開』をクリックしてください。
選択したページにベーシック認証を入力するフィールドができました!
————
あとはさっきのheader.phpに戻ります。
ここで先ほどのコードを編集して、カスタムフィールドの内容を出力しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
<?php //IDを出力 $basic_id = get_field('basic_id'); //パスワードを出力 $basic_password = get_field('basic_password'); if(!is_home()): if(is_page('members')): $userArray = array("$basic_id" => "$basic_password" ); basic_auth($userArray); endif; endif; ?> |
コードはこんな感じです。
とりあえずget_field~のところに各フィールド名を入れてください。フィールドの内容が出力されるようになります。
これでソースコードを直接さわらなくても、管理画面からIDやパスワードを設定できるようになりました!
割と自分でカスタマイズして管理しやすいので、ぜひやってみてください。