wp 認証コードでログインしてもらう場合のコード
2024年5月25日
特定の人にのみページ閲覧が可能な仕様にしたいという案件。
会員登録してもらう方法は閲覧者に負担がかかるため、認証コードを持っていれば誰でも閲覧できるようにしたい。
トップページに認証コード入力フォームを設置して、コードを入力したら目的のページに遷移するという感じ。
最初にACFで認証が必要なページに認証コードを入力できるカスタムフィールドを追加して、コードが一致した場合のみ閲覧できるという方法にした。
今案件の場合はfront-pageにはauth_code、認証が必要なページにはauth_passというフィールドを作成した。
すべての認証コードは同一にする。
トップページのauth_codeに入れたコードが保持され、認証が必要なページのauth_passとの確認が行われる。
正しい場合はページを表示し、間違っていた場合はトップページに戻る。
では設定方法を。
まずfunctions.phpに以下のコードを追加。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | // セッションの開始 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に追加。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | <?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(); ?>より前に入れること。
次に認証コードが必要なページにコード確認のためのコードを追加。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?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 ; } } ?> |
この場合はコードが間違っていた場合はトップページへリダイレクトする。