wp 認証コードでログインしてもらう場合のコード
2024年5月25日
特定の人にのみページ閲覧が可能な仕様にしたいという案件。
会員登録してもらう方法は閲覧者に負担がかかるため、認証コードを持っていれば誰でも閲覧できるようにしたい。
トップページに認証コード入力フォームを設置して、コードを入力したら目的のページに遷移するという感じ。
最初にACFで認証が必要なページに認証コードを入力できるカスタムフィールドを追加して、コードが一致した場合のみ閲覧できるという方法にした。
今案件の場合はfront-pageにはauth_code、認証が必要なページにはauth_passというフィールドを作成した。
すべての認証コードは同一にする。
トップページのauth_codeに入れたコードが保持され、認証が必要なページのauth_passとの確認が行われる。
正しい場合はページを表示し、間違っていた場合はトップページに戻る。
では設定方法を。
まずfunctions.phpに以下のコードを追加。
// セッションの開始 function start_session() { if (!session_id()) { session_start(); } } add_action('init', 'start_session'); // 認証フォームの表示関数 function display_auth_form() { ?> <form method="post" action="<?php echo esc_url(home_url()); ?>"> <dl> <div> <dt> <label for="auth_pass"><p>認証コード</p></label></dt><dd> <input type="text" name="auth_pass" id="auth_pass" required></dd> </div> </dl> <?php if (isset($_SESSION['auth_error']) && $_SESSION['auth_error']) { echo '<div class="c-error"><p>認証コードが間違っています。</p></div>'; unset($_SESSION['auth_error']); } ?> <button type="submit">確 認</button> </form> <?php } ?>
次にトップページに認証フォームを追加するコードをfront-page.phpに追加。
<?php // セッションを開始 if(!isset($_SESSION)){ session_start(); } // フォームが送信されたときの処理 if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['auth_pass'])) { // 入力された認証コード $input_auth_code = sanitize_text_field($_POST['auth_pass']); // 正しい認証コードを取得(例としてトップページに設定されたACFのフィールドを使用) $correct_auth_code = get_field('auth_code'); // 認証コードの確認 if ($input_auth_code === $correct_auth_code) { // 正しい認証コードの場合、セッションに保存 $_SESSION['auth_pass'] = $input_auth_code; // リダイレクトしてフォームの再送信を防止 wp_redirect(home_url('/scene/')); exit; } else { // 誤った認証コードの場合、エラーメッセージをセッションに保存 $_SESSION['auth_error'] = true; } } ?>
sessionコードは<?php get_header(); ?>より前に入れること。
次に認証コードが必要なページにコード確認のためのコードを追加。
<?php // セッションを開始 if(!isset($_SESSION)){ session_start(); } ?> <?php get_header(); ?> <!-- page scene ballet --> <?php // 現在のページの認証コードを取得 $required_auth_code = get_field('auth_pass'); // 認証コードが設定されている場合の確認処理 if ($required_auth_code) { // セッションに保存された認証コードが一致しない場合 if (!isset($_SESSION['auth_pass']) || $_SESSION['auth_pass'] !== $required_auth_code) { // 認証失敗メッセージを設定 $_SESSION['auth_error'] = true; // トップページにリダイレクト wp_redirect(home_url()); exit; } } ?>
この場合はコードが間違っていた場合はトップページへリダイレクトする。