質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.50%

wordpressで特定のカテゴリーページにパスワードを設けたい

解決済

回答 1

投稿

  • 評価
  • クリップ 1
  • VIEW 730

uzr1709

score 18

やりたい事
・wordpressで作成している、特定のカテゴリ(仮にAAA)にのみパスワードを設けたい。
・AAAのカテゴリーページに注意書きを載せたい。
・アクセスする毎にパスワードを要求するようにしたい。

現在はwebで調べたコードを元に以下のように記述しています。
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);
}
function password_form_cookie() {
require_once ABSPATH . 'wp-includes/class-phpass.php';
$hasher = new PasswordHash( 8, true );
setcookie( 'wp-postpass_' . COOKIEHASH, $hasher->HashPassword( wp_unslash( $_POST['post_password'] ) ), time() + MINUTE_IN_SECONDS, COOKIEPATH );
wp_safe_redirect( wp_get_referer() );
exit();
}
add_action( 'login_form_postpass', 'password_form_cookie' );

header.php

<?php
if(!is_home()):
    if(is_post_type_archive('AAA')) :
        $userArray = array("testid" => "testpass"
        );
        basic_auth($userArray); 
    endif;
endif;
?>
コード

問題点
・カテゴリ「AAA」ページに遷移した際、1度はパスワード入力を求められましたが、その後はパスワードを求められない。
・カテゴリ「AAA」ページのリンクを押した際、
ブラウザに表示されている画面は遷移前の画面でポップアップでユーザー名とパスワードを求められる。
※正しく入力するとカテゴリ「AAA」ページが表示される

プラグインを使用する方法でもその他でも構いません。
以下の実装が出来る方法を探しております。
①カテゴリ「AAA」のリンクを押下した時、カテゴリ「AAA」のページを表示。
②カテゴリ「AAA」のページに誰でも見られる注意書きを表示。
③カテゴリ「AAA」の内容はパスワードで保護されている。
④正しいパスワードを入力した場合のみ「カテゴリAAA」の内容が表示される。
※idはあっても無くても構いません。
⑤一定時間経過、またはブラウザを閉じた後に再度カテゴリ「AAA」のページに遷移しようとした際にパスワードを要求する。

どうぞお知恵をお貸しください。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • kei344

    2018/12/26 11:14

    まだ質問が「受付中」になっていますが、「ベストアンサー」を選び「解決済」にされてはいかがでしょうか。

    キャンセル

回答 1

checkベストアンサー

+2

現在のコードの問題点

提示されたコードでは、設定または入力したパスワードがset_cookieによってクッキーに書き込まれているため一度入力してしまうとブラウザのクッキーを消去するまでパスワードは保存され、自動的にカテゴリの内容が表示されます。

パスワードはユーザーに決めさせるのか、サーバーが発行したものを使わせるのか、使用が明確に示されていません。

解決の手順

なぜワードプレスでやりたいのか、
ワードプレスでなければならないことをしようとしているのか、
ポップアップにしたくないならheader関数ではなく、一度パスワード入力画面をHTML出力する。

パスワードの管理方法が示されていない。

どのようなサイト設計を考えられていらっしゃるのか、明確にしてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/12/24 02:52

    回答ありがとうございました。
    パスワードページは一度見直す事にしました。

    改めてパスワードページについて設計を考えてから質問させて頂きたいと思います。

    キャンセル

  • 2018/12/26 10:14

    私も具体的かつ事例をコードの提示でお答えできなかったのは申し訳なく思っています。またパスワードのページも再検討をされるとのことで、一定の方向性が見いだせたのかと思っています。お互い来年もサイト作成に励みましょうね。

    キャンセル

  • 2019/01/16 17:15

    設計について考え直す機会をくださったphpsyoshinsya様をベストアンサーにさせて頂きます。
    こちらこそ要件がまとまっていない状態で質問をしてすみませんでした。
    回答有難う御座いました。

    キャンセル

  • 2019/02/28 23:20

    こんな回答でベストアンサーにしてもらえるなんて、思ってなかったですよ。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる