SNS

ACFのデフォルト値を既存投稿へ一括保存する(WP-CLIなし)

投稿日:

ACFの「デフォルト値」は編集画面の初期表示であり、既存投稿へ自動保存はされません。
ここでは WP-CLIが使えない環境でも、管理画面アクセス時に一度だけ動かして、既存のカスタム投稿にACFラジオの既定値を保存する方法を解説します。

実装コード

一度だけの実行で良いので実行後は必ず削除してください。


add_action('admin_init', function () {
  // 管理者のみ・一度きり
  if ( ! current_user_can('manage_options')) return;
  if ( get_option('backfill_{ACF_FIELD_NAME}_done') ) return;

  // ===== 必ずあなたの環境に置換してください =====
  $post_type = '{POST_TYPE}';
  $field_key = '{ACF_FIELD_KEY}';
  $default   = '{DEFAULT_VALUE}';
  $meta_key  = '{ACF_FIELD_NAME}';
  // ===============================================

  // 対象投稿(未設定 or 空)だけ取得
  $args = [
    'post_type'      => $post_type,
    'post_status'    => ['publish','draft','private'],
    'fields'         => 'ids',
    'posts_per_page' => -1,
    'meta_query'     => [
      'relation' => 'OR',
      [ 'key' => $meta_key, 'compare' => 'NOT EXISTS' ],
      [ 'key' => $meta_key, 'value' => '', 'compare' => '=' ],
    ],
  ];
  $ids = get_posts($args);
  if (empty($ids)) {
    update_option('backfill_{ACF_FIELD_NAME}_done', 1);
    return;
  }

  // ACFのupdate_fieldで保存(内部メタの整合も取れる)
  foreach ($ids as $pid) {
    update_field($field_key, $default, $pid);
  }

  // 多重実行防止フラグ
  update_option('backfill_{ACF_FIELD_NAME}_done', 1);
});

動作確認手順

  • DBバックアップを取得。
  • 上のコードを設置 → /wp-admin/ にアクセス。
  • {POST_TYPE} 一覧や編集画面で {ACF_FIELD_NAME} を確認:
    • 未設定だった投稿に {DEFAULT_VALUE} が保存されている。(ACF UIで既定値が選択状態)
  • 問題なければコード削除(または backfill_{ACF_FIELD_NAME}_done フラグにより停止)

    ロールバック & 再実行

  • 再実行したい場合:
    add_action('admin_init', function () {
    if (!current_user_can('manage_options')) return;
    delete_option('backfill_{ACF_FIELD_NAME}_done'); // フラグ削除
    // 実行後このコードは削除
    });
  • 変更自体を空に戻す場合は、対象件数が多いならSQLで {ACF_FIELD_NAME} を空文字に更新
    (ただし事前バックアップ必須。最も安全なのはバックアップからの復元)。

CONTACT

サイト訪問ありがとうございます。
お仕事のご依頼、ご相談がありましたらお気軽にご連絡ください。
*は必須項目となります。

お名前 *
メールアドレス *
会社・組織名
お問い合わせ内容 *
0/300

当サイトはreCAPTCHAによって保護されており、Google のプライバシーポリシーおよび利用規約が適用されます。
当サイトのプライバシーポリシーをご一読の上ご連絡ください。