Home › Forums › ACF PRO › Multiple Save Locations for JSON? › Reply To: Multiple Save Locations for JSON?
Actually, it would be a bit more complicated now that I’ve looked into it a little more. It’s going to take a combination of hooks to change the save path based on a specific field group and a way to keep track of what field is being saved.
Please note that I have not tested this at all. It should work if I have not missed anything. I thought it was interesting and something that people might use. Please read the comments in my example.
<?php
// for this I am creating a class so that we can
// easily store infomation in one filter and then
// retrieve it in another
new acf_save_json_based_on_group_key();
class acf_save_json_based_on_group_key {
// $groups is an array of field group key => path pairs
// these will be set later
private $groups = array();
// this variable will store the current group key
// that is being saved so that we can retrieve it later
private $current_group_being_saved;
public function __construct() {
// this init action will set up the save paths
add_action('admin_init', array($this, 'admin_init'));
// this action is called by ACF before saving a field group
// the priority is set to 1 so that it runs before the internal ACF action
add_action('acf/update_field_group', array($this, 'update_field_group'), 1, 1);
} // end public function __construct
public function admin_init() {
// in this function we set up the paths where we want to store JSON files
// in this example we're creating two folders in the theme header and footer
// change the field groups and keys based on your groups
$footer = get_stylesheet_directory().'/modules/footer';
$header = get_stylesheet_directory().'/modules/header';
$this->groups = array(
'group_584d5b7986f02' => $header,
'group_584d5b7986f03' => $footer
);
} // end public function admin_init
public function update_field_group($group) {
// the purpose of this function is to see if we want to
// change the location where this group is saved
// and if we to to add a filter to alter the save path
// first check to see if this is one of our groups
if (!isset($this->groups[$group['key']])) {
// not one or our groups
return $group;
}
// store the group key and add action
$this->current_group_being_saved = $group['key'];
add_action('acf/settings/save_json', array($this, 'override_json_location'), 9999);
// don't forget to return the groups
return $group;
} // end public function update_field_group
public function override_json_location($path) {
// alter the path based on group being saved and
// our save locations
$path = $this->groups[$this->current_group_being_saved];
return $path;
} // end public function override_json_location
} // end class acf_save_json_based_on_group_key
?>
Welcome to the Advanced Custom Fields community forum.
Browse through ideas, snippets of code, questions and answers between fellow ACF users
Helping others is a great way to earn karma, gain badges and help ACF development!
We use cookies to offer you a better browsing experience, analyze site traffic and personalize content. Read about how we use cookies and how you can control them in our Privacy Policy. If you continue to use this site, you consent to our use of cookies.