Convert Advanced Custom Fields Pro configuration from PHP to JSON.
source link: https://gist.github.com/ollietreend/df32c5cbe2914f6fc407332bf6cbfca5
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
Usage
-
Put this file in your
plugins
directory and activate it in the WordPress admin. -
Convert your PHP configuration to JSON by going to 'PHP to JSON' from the 'Custom Fields' admin menu.
-
After conversion, be sure to remove the PHP configuration so that ACF reads the JSON instead.
Failed to convert?
- Check that the directory
acf-json
exists in your theme. - The web server must have permission to write to this directory.
Amazing man! thanks!
@ollietreend Thanks for this great little plugin!
I had one problem though: sub fields were missing in my converted JSON files.
If you change$group['fields'] = acf_get_local_fields($group['key']);
to$group['fields'] = acf_get_fields($group['key']);
,
everything is converting nicely.
Amazing thank you
Awesome! Thank you!
Awesome!
Works perfectly! Create the acf-json folder in your theme and see @moritzbappert comment if you have sub fields!
Thanks for your feedback @moritzbappert (and sorry this is so long overdue!)
Whilst I've not worked with WordPress for a few years now, it looks like this gist is still useful to others. So I've updated it to include your improvements so that sub-fields aren't missed out.
It still works. I just used it today to edit an old theme I inherited that had roughly 70 blocks and field groups. Great work!
Thank you! Very useful!
bigheadzach commented on Apr 5 •
This seemed to work but it looks like it took clone fields and compressed them somehow - the exported PHP is different and results in a structure that causes all sorts of problems.
Before import:
'label' => 'Accessibility',
'name' => 'accessability',
'type' => 'clone',
'instructions' => '',
'required' => 0,
'conditional_logic' => 0,
'wrapper' => array(
'width' => '',
'class' => '',
'id' => '',
),
'clone' => array(
0 => 'field_5b058cc491a9c',
),
'display' => 'seamless',
'layout' => 'block',
'prefix_label' => 1,
'prefix_name' => 1,
After import and re-export:
'label' => 'Accessibility Accordion Items',
'name' => 'accessability_items',
'type' => 'repeater',
'instructions' => '',
'required' => 1,
'conditional_logic' => 0,
'wrapper' => array(
'width' => '',
'class' => '',
'id' => '',
),
'collapsed' => 'field_5b058cd191a9d',
'min' => 1,
'max' => 0,
'layout' => 'block',
'button_label' => 'Add Item',
'_clone' => 'field_5df01d8a5312e',
'__key' => 'field_5b058cc491a9c',
'__name' => 'items',
'__label' => 'Accordion Items',
'sub_fields' => array(
),
Noting that the original PHP was written awhile back and possibly a few minor versions ago, so it's possible that the format has changed in the meantime - however the expectation is that the field machine names (by which I'm actually pulling the field values) shouldn't change, but they are and that breaks a lot of stuff. Anyone else having similar issues?
NOTE: Getting this error for each group that is imported:
Undefined index: ID in /wp-content/plugins/advanced-custom-fields-pro/includes/local-json.php on line 215
This just seems to be a check-for-existing-fieldgroup-post that isn't properly null-coalesced, so not crucial to the issue above.
Author
ollietreend commented on Apr 22
Hi @bigheadzach
I haven't used WordPress for several years now, so am not best placed to help figure out why that's happened in your case. However, I wonder if it could be related to the issue AdvancedCustomFields/acf#266.
Within this plugin, the conversion from PHP to JSON happens in the convert_group
function:
function convert_group($group) {
$group['fields'] = acf_get_fields($group['key']);
return acf_write_json_field_group($group);
}
The functions acf_get_fields
and acf_write_json_field_group
are provided by ACF itself. This plugin essentially just acts as the glue between those two functions – but it doesn't perform any conversion logic of its own, as that's all handled by those ACF functions.
I hope that helps!
Thanks a lot!!
@ollietreend Thank you for this!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK