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} を空文字に更新
(ただし事前バックアップ必須。最も安全なのはバックアップからの復元)。