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

ACF Option → Post Migration

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

by satokupo helper · github.com/satokupo/acf-option-post-migration

0stars
0forks

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.zip

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 配列から参照先フィールドを取得して再帰処理

ライセンス

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

サポート

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


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