WordPressでは、カスタムフィールドを活用して投稿に独自の情報を付与することが一般的です。しかし、運用中に「特定の条件を満たす投稿だけ一括で値を変更したい」といったケースが出てくることもあります。
この記事では、カテゴリー・投稿ステータス・公開日などの条件に応じて、投稿のカスタムフィールドを一括で更新する方法を紹介します。
functions.phpで一括更新処理を作成
以下のコードをテーマの functions.php
に追加することで、一括更新処理を一時的に実行できます。
function update_custom_field_in_bulk() {
// 一括更新の対象となる投稿を取得(例:特定のカテゴリIDが5の投稿)
$args = array(
'post_type' => 'post',
'posts_per_page' => -1,
'category__in' => array(5),
'post_status' => 'publish',
);
$posts = get_posts($args);
foreach ($posts as $post) {
// カスタムフィールドの値を更新
update_post_meta($post->ID, 'your_custom_field_key', '新しい値');
}
}
この関数は、カテゴリーIDが5
の公開済み投稿に対して、your_custom_field_key
の値を新しい値
に一括更新します。
一時的な実行方法
functions.phpに書いた関数は、以下のように一時的に実行する方法があります。
add_action('init', 'update_custom_field_in_bulk');
ただし、ページを開くたびに実行されてしまうため、一度だけ実行したら削除するかコメントアウトしてください。
より柔軟な条件の設定例
以下のような条件で絞り込みも可能です:
// 投稿日が2023年以降、特定の投稿タイプ
$args = array(
'post_type' => 'your_custom_post_type',
'posts_per_page' => -1,
'post_status' => 'publish',
'date_query' => array(
array(
'after' => '2023-01-01',
),
),
'meta_query' => array(
array(
'key' => 'your_custom_field_key',
'value' => '',
'compare' => '=', // 空のフィールドのみ
),
),
);
WP-CLIでの一括更新もおすすめ
大規模な投稿数がある場合は、WP-CLI
を使ってサーバー側でバッチ処理を行うと高速かつ安全です。サーバー操作に慣れている方には特に有効です。
注意点
- 一括更新はバックアップを取った上で実施しましょう。
- 本番環境でfunctions.phpに追加する場合は、実行後に必ず削除または無効化してください。
- 特定の条件に基づく正確なクエリ設計が重要です。事前にテスト環境で動作確認することを推奨します。
まとめ
特定の条件に応じてカスタムフィールドを一括更新することで、データの整合性維持や運用効率化が可能になります。投稿タイプ・公開日・カテゴリ・既存のカスタムフィールド値などを条件に絞ることで、柔軟な対応ができるのがWordPressの強みです。
運用フローの中でこうしたバッチ処理をうまく組み込んで、より快適な管理体制を構築していきましょう。