Web制作・開発会社 プレスマンのスタッフブログ

PRESSMAN*Tech

【ACF】PHPにエクスポートした設定をインポート可能なJSONに変換する

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/