【WordPress】特定の投稿にだけパスワード保護を自動で適用する方法

【WordPress】特定の投稿にだけパスワード保護を自動で適用する方法 WordPress

WordPressでは投稿ごとに「パスワード保護」の設定が可能ですが、運用上「特定の条件に合致する投稿には自動でパスワードをかけたい」という場面があります。毎回手動で設定するのは手間がかかるため、自動化することで作業効率が大幅に向上します。

本記事では、特定の投稿タイプや条件に一致する投稿に対して、保存時に自動的にパスワード保護を適用する方法を紹介します。

実装の概要

WordPressでは投稿の保存時に実行される save_post アクションを利用することで、特定の条件に応じて投稿のステータスやパスワードを変更することができます。ここでは「特定のカテゴリに属する投稿」や「カスタム投稿タイプ」に対して、投稿時に自動的にパスワード保護を設定する例を取り上げます。

特定のカテゴリの記事を自動的にパスワード保護する

投稿が「限定公開」カテゴリに属している場合に、自動でパスワード保護を設定するコードです。

function auto_password_protect_limited_category($post_id) {
  // 自動保存・リビジョン時はスキップ
  if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
  if (wp_is_post_revision($post_id)) return;

  // 投稿タイプチェック
  $post_type = get_post_type($post_id);
  if ($post_type !== 'post') return;

  // カテゴリが「限定公開」(例: slug が 'limited')か確認
  if (has_category('limited', $post_id)) {
    // 既にパスワード保護されていない場合のみ設定
    if (get_post_field('post_password', $post_id) === '') {
      // 任意のパスワードを設定(例:secret123)
      $update_args = array(
        'ID' => $post_id,
        'post_password' => 'secret123',
      );
      remove_action('save_post', 'auto_password_protect_limited_category'); // 再帰防止
      wp_update_post($update_args);
      add_action('save_post', 'auto_password_protect_limited_category');
    }
  }
}
add_action('save_post', 'auto_password_protect_limited_category');

このコードにより、「limited」というスラッグを持つカテゴリが付いている投稿は、保存時に自動で「secret123」というパスワードが設定されます。

カスタム投稿タイプに自動でパスワードをかける

次は、特定のカスタム投稿タイプ(例:event)に対して自動的にパスワード保護を適用する例です。

function auto_password_protect_custom_post_type($post_id) {
  if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
  if (wp_is_post_revision($post_id)) return;

  $post_type = get_post_type($post_id);
  if ($post_type !== 'event') return;

  if (get_post_field('post_password', $post_id) === '') {
    $update_args = array(
      'ID' => $post_id,
      'post_password' => 'eventpass',
    );
    remove_action('save_post', 'auto_password_protect_custom_post_type');
    wp_update_post($update_args);
    add_action('save_post', 'auto_password_protect_custom_post_type');
  }
}
add_action('save_post', 'auto_password_protect_custom_post_type');

この例では、event投稿タイプのすべての投稿が、自動的に「eventpass」というパスワードで保護されます。

パスワードを個別に制御したい場合の応用

ユーザー入力によってパスワードを指定する場合や、投稿タイトルやカスタムフィールドの値をもとにパスワードを生成したい場合は、以下のように動的に設定することも可能です。

$custom_password = 'pw-' . get_post_field('post_name', $post_id);

また、カスタムフィールド(例:protect_flag)が1のときだけパスワードをかける、といった条件も追加できます。

まとめ

WordPressでは save_post アクションを使うことで、投稿の保存時にさまざまな自動処理を実行できます。特定の投稿にパスワード保護を自動で適用すれば、運用時の手間を減らし、ヒューマンエラーも防げます。

運営ルールに応じて、カテゴリや投稿タイプ、カスタムフィールドなどの条件を柔軟に組み合わせて、自動化を活用してみましょう。