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>
PAGE TOP