function add_field_group($field_group) { // validate $field_group = acf_get_valid_field_group($field_group); // don't allow overrides if (acf_is_local_field_group($field_group['key'])) { return; } // remove fields $fields = acf_extract_var($field_group, 'fields'); // format fields $fields = acf_prepare_fields_for_import($fields); // add field group $this->groups[$field_group['key']] = $field_group; // add fields foreach ($fields as $field) { // add parent if (empty($field['parent'])) { $field['parent'] = $field_group['key']; } // add field group reference //$field['field_group'] = $field_group['key']; // add field $this->add_field($field); } }
function acf_update_field_group($field_group = array()) { // validate $field_group = acf_get_valid_field_group($field_group); // may have been posted. Remove slashes $field_group = wp_unslash($field_group); // locations may contain 'uniquid' array keys $field_group['location'] = array_values($field_group['location']); foreach ($field_group['location'] as $k => $v) { $field_group['location'][$k] = array_values($v); } // store origional field group for return $data = $field_group; // extract some args $extract = acf_extract_vars($data, array('ID', 'key', 'title', 'menu_order', 'fields')); // serialize for DB $data = maybe_serialize($data); // save $save = array('ID' => $extract['ID'], 'post_status' => 'publish', 'post_type' => 'acf-field-group', 'post_title' => $extract['title'], 'post_name' => $extract['key'], 'post_excerpt' => sanitize_title($extract['title']), 'post_content' => $data, 'menu_order' => $extract['menu_order']); // allow field groups to contain the same name add_filter('wp_unique_post_slug', 'acf_update_field_group_wp_unique_post_slug', 100, 6); // update the field group and update the ID if ($field_group['ID']) { wp_update_post($save); } else { $field_group['ID'] = wp_insert_post($save); } // action for 3rd party customization do_action('acf/update_field_group', $field_group); // clear cache wp_cache_delete('field_groups', 'acf'); // return return $field_group; }