結論
WordPressの標準エクスポート/標準インポートでは、
-
既に値が入っているACFフィールドは 上書きされない
-
まだ本番で一度も登録されたことのないフィールドは 新規追加される
という挙動になる。
起きた現象
ローカル → 本番へ
-
投稿IDは同じ
-
標準エクスポート → 標準インポート
しかし、
-
既存フィールドの値は変更されない
-
何も起きていないように見える
ところが、
「孫メニュー」のチェックを入れた瞬間に表示される
新しいループフィールド(Repeater)部分に、
まだ本番では一度も登録したことがないフィールドが、すでに値入りで存在していた。
なぜ起きるのか(構造)
WordPress標準インポートは、
① 既存メタキーがある場合
→ 基本的にスキップ(上書きしない)
② メタキーが存在しない場合
→ 新規追加する
ACFの繰り返しフィールド(Repeater)は内部的には
のように保存されている。
つまり、
-
既に存在しているmeta_key → 上書きされない
-
存在していないmeta_key → 追加される
という仕組み。
今回のケース
「孫メニュー」にチェックを入れると、
-
それまで本番に存在していなかった
-
新しいRepeaterフィールド群のmeta_keyが生成される
その瞬間に、
ローカルでエクスポートされていたmeta_keyが
新規扱いでインポート済みになっていたため表示された
という状態。
重要なポイント
WordPress標準インポートは
-
同じ投稿IDでも「同期」ではない
-
「不足しているmetaだけ補充する挙動」に近い
つまり、
✔ データ移行ツールではない
✔ 差分追加に近い動き
✔ 完全上書きはしない
今後の対策
完全同期したい場合は:
-
投稿を一度削除してからインポート
-
DBごと移行
-
専用のインポートプラグイン(上書き対応)
まとめ
WordPress標準インポートは
既存フィールドは守る
存在しないフィールドだけ追加する
という安全寄りの仕様。
今回の「孫メニューのループが突然出現した」現象は、
上書きではなく「不足分追加」挙動の結果だった。