WP 特定カテゴリーをパスワード管理する
2024年5月10日
パスワード管理はサイト全体ならプラグインで簡単にできるが、カテゴリー単位でとなると難しい。
対応するプラグイン(Access Category Password)もあったのだが、更新が停まり、現在では公開されていない。
特定の一つのカテゴリーを対象とするなら以下のコードで出来そうだったが、複数のカテゴリーに別々のパスワードを設定することはできない。
一応単一カテゴリーでは動作したのでコードを。
カテゴリースラッグがkureailogの場合。
//カテゴリーのパスワード管理 function get_protected_category_ids() { $protected_category_slug = 'kureailog'; $parent_id = get_term_by('slug', $protected_category_slug, 'category')->term_id; $child_ids = get_term_children($parent_id, 'category'); return array_merge(array($parent_id), $child_ids); } function check_category_password() { $pw = 'testpw'; //パスワード $expiration = time() + (30 * 24 * 60 * 60); //ログイン有効期間 $form_filename = 'path_to_password_form.php'; //フォーム用phpのファイル名 if (is_single() && array_intersect(get_protected_category_ids(), wp_get_post_categories(get_the_ID()))) { if (isset($_POST['category_password'])) { if ($_POST['category_password'] == $pw) { setcookie('category_password_verified', 'true', $expiration, COOKIEPATH, COOKIE_DOMAIN, is_ssl()); } else { // パスワードが間違っていた場合の処理 wp_die('パスワードが間違っています。'); } } elseif (!isset($_COOKIE['category_password_verified']) || $_COOKIE['category_password_verified'] != 'true') { require_once($form_filename); exit; } } } add_action('template_redirect', 'check_category_password');
2行目の$protected_category_slugの部分を該当するカテゴリのスラッグに変更。
11行目の$pwの部分を使用するパスワードに変更する。
path_to_password_form.phpというテンプレを用意し、以下のパスワード入力のフォームのコードを記載する。
<form action="" method="post"> <label for="category_password">パスワードを入力してください:</label> <input type="password" name="category_password" id="category_password"> <input type="submit" value="送信"> </form>