ACF Option → Post Migration
WordPressのACF(Advanced Custom Fields)で管理している「オプションページ」の値を、特定の投稿・固定ページ・カスタム投稿タイプに移行するための一時的なツールプラグインです。
by satokupo helper · github.com/satokupo/acf-option-post-migration
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/satokupo/acf-option-post-migration/archive/refs/heads/main.zipWordPressのACF(Advanced Custom Fields)で管理しているフィールド値を移行するための管理画面ツールプラグインです。
概要
このプラグインは、ACFのオプションページ('option')または特定の投稿から、指定した投稿IDにフィールド値を一括コピーします。管理画面から簡単に操作でき、移行前にドライラン(試走)モードで動作確認ができ、ネストしたフィールド構造もJSON形式で詳細にレポート表示します。
主な機能
- 管理画面から操作: 設定 > ACF Migrator で簡単に操作可能
- ドライランモード: 実際に書き込む前に、移行対象のフィールドと値をJSONレポートで確認可能
- フィールドグループ選択: 全グループ一括、または特定グループのみを選択可能
- ネスト構造対応: Group、Repeater、Flexible Content、Cloneなどの複雑なフィールド構造に対応
- 詳細レポート: フィールドツリー、値のプレビュー、更新状況を階層構造で表示
- 安全設計: 管理者権限チェック、ノンス検証、投稿IDの存在確認を実施
対応フィールドタイプ
- 通常のフィールド(テキスト、画像、リレーションシップなど)
- Group(グループ)
- Repeater(リピーター)
- Flexible Content(フレキシブルコンテンツ)
- Clone(クローン)
使い方
1. プラグインの有効化
プラグインを有効化すると、通常の管理画面が表示されます。
2. 設定画面へのアクセス
WordPress管理画面で 設定 > ACF Migrator にアクセスします。
3. 移行設定の入力
フォームに以下の項目を入力します:
-
移行元ID:
- オプションページから移行する場合:
option(デフォルト) - 特定の投稿から移行する場合: 投稿ID(数値)
- オプションページから移行する場合:
-
移行先ID(必須):
- コピー先の投稿ID(数値)
-
グループセレクター(必須):
- 単一グループ:
group_xxxxxxxxxx(グループキー) - 複数グループ:
["group_xxx","group_yyy"](JSON配列形式) - 全グループ:
all
- 単一グループ:
-
ドライランモード:
- チェックあり = 試走モード(書き込みなし、レポートのみ)
- チェックなし = 本番実行(実際に値を書き込み)
4. ドライラン実行
- ドライランモード にチェックを入れたまま 移行を実行 ボタンをクリック
- 画面下部にJSONレポートが表示されます
- レポート内容を確認:
would_update: 移行予定のフィールドskipped: 空値でスキップされたフィールドtotals: 集計情報
5. 本番実行
- レポート内容に問題がなければ、ドライランモード のチェックを外す
- 移行を実行 ボタンをクリック
updated(成功)またはfailed(失敗)のステータスを確認
6. プラグインの削除
移行完了後は、このプラグインを削除してください(セキュリティのため)。
JSONレポートの見方
{
"dry_run": true,
"target_post_id": 123,
"timestamp": "2025-11-13T06:27:00+00:00",
"totals": {
"groups": 2, // 処理したグループ数
"fields": 15, // 総フィールド数
"non_empty": 10, // 空でないフィールド数
"would_update": 10, // 移行予定(ドライラン時)
"updated": 0, // 更新成功(本番実行時)
"failed": 0, // 更新失敗
"skipped": 5 // スキップ(空値)
},
"groups": [
{
"group_key": "group_xxx",
"group_title": "基本設定",
"tree": [
{
"label": "サイト名",
"name": "site_name",
"key": "field_yyy",
"type": "text",
"value": {
"type": "string",
"size": "string(10)",
"preview": "サンプルサイト"
},
"result": "would_update"
}
]
}
]
}
注意事項
- 一時的なプラグイン: 移行作業専用です。使用後は必ず削除してください
- バックアップ必須: 実行前にデータベースのバックアップを取得してください
- 管理者権限: 管理者としてログインしている必要があります
- ACF必須: Advanced Custom Fields(無料版またはPRO版)が有効化されている必要があります
- 既存値の上書き: 移行先の投稿に既存のACF値がある場合、上書きされます
システム要件
- WordPress 5.0以上
- PHP 8.0以上(
get_debug_type()関数を使用) - Advanced Custom Fields 5.x / 6.x
技術詳細
処理フロー
admin_menuフックで管理画面メニューを追加- 設定画面でフォーム送信時に処理実行
- 権限チェック(
manage_options権限必須)とノンス検証 - 対象グループの取得と絞り込み(all / JSON配列 / 単一グループキー)
- フィールド定義を再帰的に走査
- 各フィールドの値を移行元(
'option'または投稿ID)から取得 - ドライランモードに応じて
update_field()実行または予定記録 - JSON形式でレポートを生成して画面に表示
再帰処理対応
enumerate_and_process_field() 関数により、以下のネスト構造を再帰的に処理します:
- Group:
sub_fieldsを再帰処理 - Repeater:
sub_fieldsを再帰処理(定義のみ、行ごと展開は省略) - Flexible Content:
layouts配下の各sub_fieldsを再帰処理 - Clone:
clone配列から参照先フィールドを取得して再帰処理
ライセンス
このプラグインは一時的な移行ツールとして作成されたものです。自由に使用・改変できますが、使用後は削除することを推奨します。
サポート
このプラグインは「使い捨て」の移行ツールとして設計されているため、継続的なサポートは提供されません。
重要: 移行完了後は、セキュリティリスクを避けるため、このプラグインファイルを削除してください。