WP Manifestindependent plugin directory
manifest / developer / acf-option-post-migration

ACF Option → Post Migration

WordPressのACF(Advanced Custom Fields)で管理している「オプションページ」の値を、特定の投稿・固定ページ・カスタム投稿タイプに移行するための一時的なツールプラグインです。

★ 0stars

Install

Download source zip No release zip yet

This is the repository archive. It installs, but the folder name will carry the branch suffix and updates will not flow.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/satokupo/acf-option-post-migration/archive/refs/heads/main.zip
No built-in updater. New versions won't appear under Dashboard → Updates. Install new releases yourself, or let Git Updater track the repository.

WordPressの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. ドライラン実行

  1. ドライランモード にチェックを入れたまま 移行を実行 ボタンをクリック
  2. 画面下部にJSONレポートが表示されます
  3. レポート内容を確認:
    • would_update: 移行予定のフィールド
    • skipped: 空値でスキップされたフィールド
    • totals: 集計情報

5. 本番実行

  1. レポート内容に問題がなければ、ドライランモード のチェックを外す
  2. 移行を実行 ボタンをクリック
  3. 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

技術詳細

処理フロー

  1. admin_menu フックで管理画面メニューを追加
  2. 設定画面でフォーム送信時に処理実行
  3. 権限チェック(manage_options 権限必須)とノンス検証
  4. 対象グループの取得と絞り込み(all / JSON配列 / 単一グループキー)
  5. フィールド定義を再帰的に走査
  6. 各フィールドの値を移行元('option' または投稿ID)から取得
  7. ドライランモードに応じて update_field() 実行または予定記録
  8. JSON形式でレポートを生成して画面に表示

再帰処理対応

enumerate_and_process_field() 関数により、以下のネスト構造を再帰的に処理します:

  • Group: sub_fields を再帰処理
  • Repeater: sub_fields を再帰処理(定義のみ、行ごと展開は省略)
  • Flexible Content: layouts 配下の各 sub_fields を再帰処理
  • Clone: clone 配列から参照先フィールドを取得して再帰処理

ライセンス

このプラグインは一時的な移行ツールとして作成されたものです。自由に使用・改変できますが、使用後は削除することを推奨します。

サポート

このプラグインは「使い捨て」の移行ツールとして設計されているため、継続的なサポートは提供されません。


重要: 移行完了後は、セキュリティリスクを避けるため、このプラグインファイルを削除してください。