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;
}
}
?>
この場合はコードが間違っていた場合はトップページへリダイレクトする。