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>