ACF JSON CSV Integrator self-updates
An integrated tool to export and import ACF (Advanced Custom Fields) flexible content and repeaters seamlessly as JSON-formatted strings via CSV.
by Gemini · github.com/ship-git-admin/acf-json-csv-integrator · website
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/ship-git-admin/acf-json-csv-integrator/archive/refs/heads/main.zipShips its own WordPress updater (Plugin Update Checker), so new versions show up under Dashboard → Updates.
An integrated tool to export and import ACF (Advanced Custom Fields) flexible content and repeaters seamlessly as JSON-formatted strings via CSV.
1.0.39
- セキュリティ: CSVインポートと一時ファイル削除に、操作別nonce・実行者/サイト/添付ファイルを固定するジョブ検証・排他制御を追加。
- セキュリティ: オプションインポートの保存先を、選択した登録済みACFオプションページと、そのページに適用される登録済みフィールドへ限定。
- セキュリティ: 未登録フィールド、ACF未使用時の汎用オプション保存、クライアント指定の添付IDによる処理を廃止。
- 互換性: オプションCSVに管理画面識別用の
_ajci_options_page列を追加。予約列はACFの保存対象外。
1.0.38 (2026-09-11)
- 更新: GitHub自動更新先を
ship-git-admin/acf-json-csv-integratorに変更し、公開リポジトリ対応。 - 更新:
plugin-update-checkerを公式 v5.7 に更新。 - セキュリティ: GitHubアクセストークンのハードコードを削除。
1.0.37 (2026-09-02)
- 修正: タームの柔軟コンテンツ・リピーター内にあるACF画像/ファイルIDを、エクスポート時に移行可能なURLへ変換するよう改修。
- 修正: CSVインポート時、画像取得前に移行先ドメインへ置換して404になる問題を修正。JSON内URLの正規化、リダイレクト、2xxレスポンスにも対応。
1.0.36 (2026-07-23)
- セキュリティ・権限の制限: インポートおよびエクスポート機能の実行権限を管理者(
manage_options権限保持者)限定に厳格化。編集者(Editor)等の非管理者ユーザーの管理メニュー(ツール内の「CSV Export」および「ツール」→「インポート」内の「CSV」)には非表示とし、ダイレクトアクセスやAJAXリクエストも拒否するよう改修。
1.0.35 (2026-07-09)
- 新機能: インポートするコンテンツ本文(
post_content)や、ACFなどの各種メタデータに含まれるテスト環境の仮アドレス(kawayou-reform-com.check-xserver.jp等)を、現在のサイトドメイン(home_url())にインポート時に自動で一括置換する機能を追加。これにより、本文中に埋め込まれていた仮アドレスの画像リンク等のリンク切れ(画像の欠損)が自動修復されます。
1.0.34 (2026-07-09)
- 重大な不具合修正: すでに本番環境のデータベース上に重複ベース名(枝番
-7など)で登録されてしまっている既存アタッチメントに対しても、インポート時の既存アタッチメント上書き修復(repairAttachment)のフェーズにおいて自動的にリネーム・再配置(例:-7-1.jpg)して登録情報を更新するよう改修。これにより、すでに壊れている既存データも自動的に競合が解消され、WebPの上書き競合が根本解決します。
1.0.33 (2026-07-09)
- 改善: 同じ年月フォルダに拡張子だけが異なる別画像(例:
3-1-5.jpg[排水口] と3-1-5.png[床工事])を新規追加する際、WebP自動変換処理(テーマスニペット等)による同一WebPファイル名での上書き競合を防ぐため、新規アタッチメント登録時に拡張子を無視してベース名が重複しているファイルを検知し、自動的にリネーム(枝番付与)して登録する処理を実装。
1.0.32 (2026-07-09)
- 改善: 年月フォルダ内での画像名衝突を防ぐため、既存アタッチメントの一致検索時に対象アタッチメントの拡張子(MIMEタイプ)まで完全一致することを厳密にチェックするように修正。
1.0.31 (2026-07-09)
- 改善: ファイル名のみの一致検索による無関係な画像の紐付けを防ぐため、年月フォルダ名(相対パス)まで含めた厳密なアタッチメント一致判定へと改修。
1.0.30 (2026-07-09)
- 改善: 既存メディア内に重複登録されている壊れたアタッチメントが存在する場合の一括修復および、物理WebPファイルをサイズ違いも含めて根こそぎ物理削除する仕組みを導入。
1.0.27 (2026-06-12)
dev環境(マルチサイト 001_development)でも検証済み。「マルチサイトだから柔軟コンテンツが入らない」は誤りで、実際はターム379に正しく入っていた(確認していたのは別ターム174)。画像は移行元URL未指定が原因だった。
- 新機能: エクスポートCSVに移行元サイトURL(
_ajci_origin列)を自動埋め込み。インポート時にこの列を自動で読み取って画像ID解決に使用するため、「移行元サイトURL」の手入力が不要に(手入力した場合はそちらを優先)。投稿・ターム・オプションページの3種すべてのエクスポートに対応。 - 不具合修正: タームインポートで、CSVのスラッグが移行先の別タームで使用済みの場合(例:
kitchenが既存ターム「キッチン」で使用中)、duplicate_term_slugエラーで名前・説明・親の更新まで丸ごと失敗していた問題を修正。既存スラッグを維持して名前等のみ更新し、警告を表示するように変更。
1.0.26 (2026-06-11)
実サーバー(003-shiptraining.jp テスト環境)でターム/オプションページ/投稿の3種CSVをフルインポート検証し、柔軟コンテンツ・画像が100%取り込まれることを確認済み。
- 重大な不具合修正(画像が入らない問題の本丸): 画像の新規取り込み時に
wp_insert_attachmentへID(旧ID)を渡していたため、存在しないIDでは「既存投稿の更新」と解釈されて常に失敗(0)していた問題を修正。import_id(推奨ID)として渡すことで、IDが空いていれば旧IDのまま、埋まっていれば新IDで正しく登録されるように変更。 - 重大な不具合修正: 同一IDのアタッチメントが移行先に存在する場合の健全性チェックを追加。DBレコードだけあって実ファイルが無い「壊れたアタッチメント」(クローン環境で頻発)を従来はそのまま採用してしまい、管理画面で画像が空に見えていた。実ファイルの存在を確認し、壊れている場合は
_source_urlメタから自動再ダウンロードしてその場で修復(ID維持)するように変更。 - 改善: 移行元URLの候補を複数化(
getImportOriginCandidates)。ユーザー指定URL →_source_urlメタ由来 → guid 由来の順で自動的に複数の移行元を試行。移行元の指定が間違っていても、過去のインポート履歴から本来の画像元(例: 本番サイト)を見つけて解決できる。 - 改善: REST API が無効(
rest_disabled)の判定を移行元ごとにキャッシュし、無駄なAPIリクエストを削減。スクレイピングフォールバックの正規表現に og:image を追加し、無関係なページから誤った画像を拾わないようガード強化。 - 改善: 再インポート時の画像重複ダウンロードを防止。
_source_urlメタによる既ダウンロード検索をaddMediaFileに追加し、addThumbnailも同経路に統一。再インポートしてもメディアライブラリが増殖しない(検証済み: 575→575件)。 - 改善: エクスポーターが出力する「グループ親列(JSON)+子フラット列」の冗長列について、親列が存在する場合は子列を黙ってスキップ(重複インポート・警告ノイズ防止)。
- 改善:
setAttachmentでwp_insert_attachment失敗(WP_Error/0)時のガードを追加。 - 改善: 画像ID解決結果を実行内キャッシュし、同じ旧IDへの重複問い合わせを排除。
1.0.25 (2026-06-11)
- 改善: 移行元サイトの REST API が無効化(
rest_disabled)されている場合でも、画像の取得ができるよう修正。フォールバックとして、HTMLアタッチメントページ(/?attachment_id=xxx)からリダイレクトを最大10回追跡し、ページ内のHTML(<p class="attachment"><a href="...">)からオリジナルの画像URLを正規表現でスクレイピングして取得・ダウンロードする機能を追加しました。 - 不具合修正: WP-CLI等の非管理画面コンテキスト(またはフロントエンド等)でインポートを実行した際、
wp_generate_attachment_metadataやwp_update_attachment_metadataなどのメディアメタデータ作成関数が定義されておらず、画像アタッチメント登録がサイレントに失敗していた問題を修正。画像インポートヘルパーの処理開始時に必要なWordPressコアファイル(image.php等)を明示的に読み込むようにしました。 - 改善: 同一サーバー・ローカル環境内でのドメイン違いの移行時に、移行元ドメインのWordPress物理パスを自動推測し、
wp-config.phpからDB接続して画像メタデータを直接検索・アタッチメント解決する処理(resolveLocalWpPath/getSourceDbConnection)を実装しました。
1.0.24 (2026-06-11)
- 不具合修正: 1.0.22 以前のバージョンでの誤ったフォールバック処理により、すでにデータベースに書き込まれてしまった「柔軟コンテンツの破損データ」を安全にクリーンアップする機能を追加しました。URLに
?cleanup_acf_error=1パラメータを付与してアクセスすることで、クリーンアップを実行しCannot access offset of type array致命的エラーを解消できます。
1.0.23 (2026-06-11)
- 重大な不具合修正: 1.0.22 で追加した「
update_fieldがfalseを返したらupdate_option/update_term_metaにフォールバックする」処理が、柔軟コンテンツのデータを破壊しCannot access offset of type array(致命的エラー)を引き起こしていた問題を修正。update_fieldは値が不変の場合もfalseを返すため、戻り値で失敗判定してはいけないというのが原因でした。当該フォールバックを完全に削除しました。 - 改善: フィールド名→フィールドキー(
field_xxx)の逆引きを、acf_get_field()頼みから「ACFフィールドグループ全体を走査して名前→キーのマップを構築する」確実な方式に強化(buildFieldKeyMap)。オプションページ/タクソノミーのコンテキストを優先し、同名フィールドの衝突にも対応。これにより柔軟コンテンツが正しく保存されない問題を解消。 - 安全対策: フィールドキーを解決できない「配列値」を生のまま ACF のメタ/オプションに書き込むとデータ構造が壊れるため、解決できない場合は書き込まずにスキップし、警告(フィールドグループ未同期の可能性)を表示するように変更。データ破損を未然に防ぎます。
- 改善:
getImportOriginDomainをサブディレクトリ型WordPress(例:https://example.com/dev/001_development)に対応。指定URLをパス込みで使用し、REST API のURLが正しく組み立てられるよう修正。 - 改善:
resolveImageIdで、同一IDのアタッチメントが移行先にすでに存在する場合はそのまま採用(同一サイト・同一IDでの再インポートに対応)。
1.0.21 (2026-06-11)
- 新機能: インポート画面に「移行元サイトURL」の入力欄を追加。アタッチメント(画像)がまだ移行先に登録されていない場合でも、入力されたドメインを使って画像を自動取得・ダウンロード・再紐付けできるよう改善しました(エクスポートのやり直しは不要です)。
- 改善: 柔軟コンテンツ(配列データ)のインポート時に ACF のフィールドキー逆引き(逆解決)に失敗した場合、動作ログに警告文(「⚠️ 警告:フィールド名のACFキーを解決できませんでした。移行先でACFフィールドグループが有効化されているか確認してください」)を表示し、不具合の特定を容易にしました。
1.0.20 (2026-06-11)
- 改善: クラス名(
RSCSV_Import_Post_Helper等)およびファイル名をAJCI_独自のものに一括リネーム(リファクタリング)。本家「Really Simple CSV Importer」などの他プラグインとの競合を完全に防ぎます。 - 不具合修正:
class-rscsv_import_post_helper.phpの 413行目の/**の閉じ忘れ、および 496〜514行目のマージミスのゴミコードを削除。これにより、インポート処理時に Fatal Error が発生する問題を修正。 - 改善: インポーター各モジュールの読み込み前に
opcache_invalidateを呼び出し、OPcache のキャッシュが原因で古いクラスが読み込まれ続ける不具合を解消。
1.0.19 (2026-06-11)
- 改善: 柔軟コンテンツ(Flexible Content)やリピーター等で、インポート時の update_field 呼び出しにフィールド名ではなくACFのフィールドキー(
field_xxx)を自動逆引きして使用するように修正。これにより、ターム(カテゴリ)等で柔軟コンテンツデータが正常に保存されない不具合を解消。 - 改善: プラグイン更新時、および強制アップデートチェック時(
?force_update_check=1)に OPcache(PHP キャッシュ)を自動クリアする処理を追加。キャッシュが原因で発生するCall to undefined methodなどの不具合を防止。
1.0.18 (2026-06-11)
- 不具合修正: Ajaxバッチ処理中に例外・エラーが発生した際、出力バッファにたまっていた
<li>タグがJSONレスポンスの前に漏れ出てしまい、SyntaxErrorを引き起こす問題を修正(エラー発生時に出力バッファを強制クリアするように対策)。
1.0.17 (2026-06-11)
- タームインポート(
setTermMeta)、投稿インポート(setMeta)において、単一画像/ファイルフィールドに画像ID(数値)が指定されている場合にも、画像を自動ダウンロード・アタッチメントID再紐付けするように修正。 - ACFの配列データ(Flexible ContentやRepeaterなど)のネストされた配列内に含まれる画像ID(数値)についても、再紐付け・ID置換が適用されるように修正。
- class-rscsv_import_post_helper.php 内の文字コード崩れ(非UTF-8文字)およびゴミコードをクリーンアップ。
1.0.16 (2026-06-11)
- オプションページのCSVインポート時に、アタッチメントIDや画像URLを検知して画像を自動ダウンロードし、新アタッチメントIDへと再紐付け(置換)する処理を追加。
- アタッチメントインポート時に、旧IDとインポート元URLをメタデータに保存し、再インポートや他のインポート時に紐付け可能にする。
1.0.15 (2026-06-11)
- 自動更新エラーの検証用デバッグ出力機能を追加(クエリパラメータ
?force_update_check=1指定時にWordPress管理画面の上部へ詳細情報を出力)。
1.0.14 (2026-06-11)
- キャッシュ回避のためのバージョンアップ
- キャッシュを強制バイパスするクエリパラメータ
?force_update_check=1ハンドラーの実装。
1.0.13 (2026-06-11)
- 新機能: オプションページデータ(
options_page_idを含むCSV)のインポート処理を実装。 - 不具合修正: オプションページインポート時に
post_type不足の警告文(HTML)がAjaxレスポンスのJSONの前に出力されてしまい、フロントエンド側でSyntaxError: Unexpected token '<'が発生する問題を解消。
1.0.12 (2026-06-10)
- 不具合修正: Ajaxハンドラー内でヘッダー行を解析する際、
$importer->parse_columnsを誤って呼び出していた記述を$h->parse_columns(正しくはヘルパークラスのメソッド)へ修正。
1.0.11 (2026-06-10)
- 不具合修正: Ajaxバッチ処理中に
wp_create_categoriesなどの管理画面用関数が未定義となり 500エラーになる問題への対策として、必要なコアファイル (taxonomy.php,image.php,file.php,media.php) を明示的に読み込むよう修正。 - 改善: Ajax処理中にFatal Errorが発生した場合、500エラーではなくエラー内容をJSON(アラート表示)で返すようにエラーハンドリングを追加。
1.0.10 (2026-06-10)
- 不具合修正: Ajaxリクエスト時に
WP_LOAD_IMPORTERSが未定義のためインポーターモジュールが読み込まれず、バッチ処理で 400 Bad Request が発生する問題を修正。
1.0.9 (2026-06-08)
- インポート処理をAjaxによるバッチ処理に変更。大容量CSVインポート時のタイムアウトおよびメモリエラーを解消。
1.0.8 (2026-06-05)
- 不具合修正: BOM付き+全項目クォートのCSVで1列目のカラム名が壊れ(例:
"post_id")、post_id等が認識されず更新できない問題を修正(BOM除去後に残る囲みクォートを除去)。
1.0.7 (2026-06-05)
- タームインポートで
parent列をスラッグ(または名前)で指定できるように対応。親を先頭に並べた1ファイルで親子階層を構築可能(親IDが不要に)。
1.0.6 (2026-05-29)
- タクソノミーターム(分類情報)のインポートおよびエクスポート機能を追加
- 画像ダウンロード時にBasic認証を突破する機能(管理画面に入力フォームを追加)を実装
- その他、インポート処理の改善とバグ修正
1.0.2 (2026-05-19)
- 自動アップデート認証用のトークンを制限付きトークン(Fine-grained PAT)へ移行
1.0.1 (2026-05-19)
- 不具合の修正 (Bug fixes and stability improvements)
1.0.0 (2026-05-19)
- 初回リリース (Initial release)