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
アクションを使うことで、投稿の保存時にさまざまな自動処理を実行できます。特定の投稿にパスワード保護を自動で適用すれば、運用時の手間を減らし、ヒューマンエラーも防げます。
運営ルールに応じて、カテゴリや投稿タイプ、カスタムフィールドなどの条件を柔軟に組み合わせて、自動化を活用してみましょう。