【WordPress標準インポートの挙動】既存ACFフィールドは上書きされないが「空フィールド」は追加される現象

結論

WordPressの標準エクスポート/標準インポートでは、

  • 既に値が入っているACFフィールドは 上書きされない

  • まだ本番で一度も登録されたことのないフィールドは 新規追加される

という挙動になる。


起きた現象

ローカル → 本番へ

  • 投稿IDは同じ

  • 標準エクスポート → 標準インポート

しかし、

  • 既存フィールドの値は変更されない

  • 何も起きていないように見える

ところが、

「孫メニュー」のチェックを入れた瞬間に表示される
新しいループフィールド(Repeater)部分に、

まだ本番では一度も登録したことがないフィールドが、すでに値入りで存在していた。


なぜ起きるのか(構造)

WordPress標準インポートは、

① 既存メタキーがある場合

→ 基本的にスキップ(上書きしない)

② メタキーが存在しない場合

→ 新規追加する

ACFの繰り返しフィールド(Repeater)は内部的には

meta_key = field_name_0_subfield
meta_key = field_name_1_subfield
meta_key = field_name(行数管理)

のように保存されている。

つまり、

  • 既に存在しているmeta_key → 上書きされない

  • 存在していないmeta_key → 追加される

という仕組み。


今回のケース

「孫メニュー」にチェックを入れると、

  • それまで本番に存在していなかった

  • 新しいRepeaterフィールド群のmeta_keyが生成される

その瞬間に、

ローカルでエクスポートされていたmeta_keyが
新規扱いでインポート済みになっていたため表示された

という状態。


重要なポイント

WordPress標準インポートは

  • 同じ投稿IDでも「同期」ではない

  • 「不足しているmetaだけ補充する挙動」に近い

つまり、

✔ データ移行ツールではない
✔ 差分追加に近い動き
✔ 完全上書きはしない


今後の対策

完全同期したい場合は:

  • 投稿を一度削除してからインポート

  • DBごと移行

  • 専用のインポートプラグイン(上書き対応)


まとめ

WordPress標準インポートは

既存フィールドは守る
存在しないフィールドだけ追加する

という安全寄りの仕様。

今回の「孫メニューのループが突然出現した」現象は、
上書きではなく「不足分追加」挙動の結果だった。