PHPにエクスポートしたACFフィールドグループ設定を再度GUIで修正できるように、
PHPからACFの管理画面にインポート可能なJSONに変換する方法をご紹介します。
概要
エクスポートしたPHPからJSONへの変換は、とても簡単です。
ACFのJSONとPHPで比較してみると、
JSONをデコードしてPHP化したものをacf_add_local_field_group関数に登録しているだけなのです。
ということは、
acf_add_local_field_group関数に登録している、ACFフィールドグループをエンコードでJSON化してやれば、
ACFの管理画面にインポート可能なJSONに戻せるということです。
実際にやってみます。
エクスポートしたPHPからJSONへの変換手順
1. PHPのACF設定からJSONに変換する
json_encode関数でエンコードします。
出力したJSONを見やすくするために、第2引数に「JSON_PRETTY_PRINT」を指定しています。
<?php
// acf_add_local_field_group関数の引数に指定している配列をコピペする。
$acf = array(
'key' => 'group_5cdbd0d355489',
'title' => 'テスト',
'fields' => array(
array(
'key' => 'field_5cdbd0d7fec6f',
'label' => '仮名文字',
'name' => 'kana',
'type' => 'text',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array(
'width' => '',
'class' => '',
'id' => '',
),
'default_value' => '',
'maxlength' => '',
'placeholder' => '',
'prepend' => '',
'append' => '',
),
),
'location' => array(
array(
array(
'param' => 'post_type',
'operator' => '==',
'value' => 'post',
),
),
),
'menu_order' => 0,
'position' => 'normal',
'style' => 'default',
'label_placement' => 'top',
'instruction_placement' => 'label',
'hide_on_screen' => '',
'active' => true,
'description' => '',
);
$echo json_encode( $acf, JSON_PRETTY_PRINT );
?>
2. 新規のJSONファイルを作成して、エンコード結果のJSONをコピペする。
JSONは配列でなければなりません。
複数のフィールドグループを追加すれば、一度にインポートすることができます。
JSON形式(配列)
[
// 配列の入れ子
{
"key": "group_5cdbd0d355489",
"title": "テスト",
"fields": [
{
"key": "field_5cdbd0d7fec6f",
"label": "仮名文字",
"name": "kana",
"type": "text",
"instructions": "",
"required": 0,
"conditional_logic": 0,
"wrapper": {
"width": "",
"class": "",
"id": ""
},
"default_value": "",
"maxlength": "",
"placeholder": "",
"prepend": "",
"append": ""
}
],
"location": [
[
{
"param": "post_type",
"operator": "==",
"value": "post"
}
]
],
"menu_order": 0,
"position": "normal",
"style": "default",
"label_placement": "top",
"instruction_placement": "label",
"hide_on_screen": "",
"active": true,
"description": ""
},
// フィールドグループが複数ある場合は、ここに追加していく。
]
3. 出来上がったインポート用JSONファイルをACF管理画面よりインポートする
インポート後
やったぜ!
問題なくインポートできているようです。
編集も問題なくできることを確認しました。
他のエクスポートしたPHPからJSONへの変換手順
JSON化したいACFフィールドグループが多い場合は、
以下記事で紹介しているacf_get_local_field_groups関数を利用するやり方のほうがよいかもしれません。
https://awesomeacf.com/snippets/convert-an-acf-field-group-from-php-to-json/