function update_field_group($field_group) { // vars $path = acf_get_setting('save_json'); $file = $field_group['key'] . '.json'; // remove trailing slash $path = untrailingslashit($path); // bail early if dir does not exist if (!is_writable($path)) { //error_log( 'ACF failed to save field group to .json file. Path does not exist: ' . $path ); return; } // load fields $fields = acf_get_fields($field_group); // prepare fields $fields = acf_prepare_fields_for_export($fields); // add to field group $field_group['fields'] = $fields; // extract field group ID $id = acf_extract_var($field_group, 'ID'); // write file $f = fopen("{$path}/{$file}", 'w'); fwrite($f, acf_json_encode($field_group)); fclose($f); }
/** * Export an ACF field group */ function acf_push($group_id) { // load field group $field_group = acf_get_field_group($group_id); // validate field group if (empty($field_group)) { return; } // load fields $fields = acf_get_fields($field_group); // prepare fields $fields = acf_prepare_fields_for_export($fields); // add to field group $field_group['fields'] = $fields; // extract field group ID $id = acf_extract_var($field_group, 'ID'); // add to json array return $field_group; }
static function get_json() { if (!function_exists('acf_get_field_group')) { echo 'You need ACF activated to use this screen'; exit; } $keys = isset($_GET['generate-template-id']) ? array($_GET['generate-template-id']) : array(); //print_r($keys); //exit; //$keys = $_GET['acf_export_keys']; //$keys = array('group_55e23ad63ecc3'); //$keys = array('group_55d38b033048e'); //$keys = array('group_55d26a506a990'); // validate if (empty($keys)) { return false; } // vars $json = array(); // construct JSON foreach ($keys as $key) { // load field group $field_group = acf_get_field_group($key); // validate field group if (empty($field_group)) { continue; } // load fields $field_group['fields'] = acf_get_fields($field_group); // prepare fields $field_group['fields'] = acf_prepare_fields_for_export($field_group['fields']); // extract field group ID $id = acf_extract_var($field_group, 'ID'); // add to json array $json[] = $field_group; } // return return $json; }
function prepare_field_for_export($field) { // sub field (parent_layout) acf_extract_var($field, 'parent_layout'); // sub fields if ($field['type'] == 'repeater') { $field['sub_fields'] = acf_prepare_fields_for_export($field['sub_fields']); } elseif ($field['type'] == 'flexible_content') { foreach ($field['layouts'] as $l => $layout) { $field['layouts'][$l]['sub_fields'] = acf_prepare_fields_for_export($layout['sub_fields']); } } // return return $field; }
function get_json() { // validate if (empty($_POST['acf_export_keys'])) { return false; } // vars $json = array(); // construct JSON foreach ($_POST['acf_export_keys'] as $key) { // load field group $field_group = acf_get_field_group($key); // validate field group if (empty($field_group)) { continue; } // load fields $field_group['fields'] = acf_get_fields($field_group); // prepare fields $field_group['fields'] = acf_prepare_fields_for_export($field_group['fields']); // extract field group ID $id = acf_extract_var($field_group, 'ID'); // add to json array $json[] = $field_group; } // return return $json; }
function acf_prepare_field_group_for_export($field_group) { // extract field group ID $id = acf_extract_var($field_group, 'ID'); // prepare fields $field_group['fields'] = acf_prepare_fields_for_export($field_group['fields']); // filter for 3rd party customization $field_group = apply_filters('acf/prepare_field_group_for_export', $field_group); // return return $field_group; }
function acf_write_json_field_group($field_group) { // vars $path = acf_get_setting('save_json'); $file = $field_group['key'] . '.json'; // remove trailing slash $path = untrailingslashit($path); // bail early if dir does not exist if (!is_writable($path)) { return false; } // extract field group ID $id = acf_extract_var($field_group, 'ID'); // add modified time $field_group['modified'] = get_post_modified_time('U', true, $id, true); // prepare fields $field_group['fields'] = acf_prepare_fields_for_export($field_group['fields']); // write file $f = fopen("{$path}/{$file}", 'w'); fwrite($f, acf_json_encode($field_group)); fclose($f); // return return true; }
function export($args, $assoc_args) { // if empty it will show export all fields $export_field = ''; if (is_multisite()) { $choice = $this->select_blog(); switch_to_blog($choice); } //if export all is used skip the question popup if (empty($args) || $args[0] != 'all') { $export_field = $this->select_acf_field(); } if (empty($export_field)) { WP_CLI::success("Exporting all fieldgroups \n"); } else { WP_CLI::success("Exporting fieldgroup \n"); } $field_groups = get_posts(array('numberposts' => -1, 'post_type' => 'acf-field-group', 'sort_column' => 'menu_order', 'order' => 'ASC', 'include' => $export_field)); if ($field_groups) { if (isset($assoc_args['export-path']) && isset($this->paths[$assoc_args['export-path']])) { $export_path = $this->paths[$assoc_args['export-path']]; } else { $export_path = $this->select_export_path(); } $acf_fld_grp = new acf_field(); if (!is_dir($export_path) && !mkdir($export_path, 0755, false)) { WP_CLI::line('fieldgroup directory exists or cant be created!'); } foreach ($field_groups as $group) { $title = get_the_title($group->ID); $sanitized_title = sanitize_title($title); $subpath = $export_path . $sanitized_title; $uniquid_path = $subpath . '/uniqid'; $field_group_array = array(); $field_group = acf_get_field_group($group->ID); // validate field group if (empty($field_group)) { continue; } // load fields $fields = acf_get_fields($field_group); // prepare fields $fields = acf_prepare_fields_for_export($fields); // add to field group $field_group['fields'] = $fields; // extract field group ID $id = acf_extract_var($field_group, 'ID'); $json = acf_json_encode($field_group); // retrieve the uniquid from the file if it exists else we make a new one $uniqid = file_exists($uniquid_path) ? file_get_contents($uniquid_path) : uniqid(); // each field_group gets it's own folder by field_group name if (!is_dir($subpath) && !mkdir($subpath, 0755, false)) { WP_CLI::line('fieldgroup subdirectory exists or cant be created!'); } else { // let's write the array to a data.php file so it can be used later on $fp = fopen($subpath . '/' . "data.php", "w"); $output = "<?php \n\$group = " . var_export($field_group, true) . ';'; fwrite($fp, $output); fclose($fp); $fp = fopen($subpath . '/' . "data.json", "w"); $output = $json; fwrite($fp, $output); fclose($fp); // write the uniquid file if it doesn't exist if (!file_exists($uniquid_path)) { $fp = fopen($subpath . '/' . "uniqid", "w"); $output = $uniqid; fwrite($fp, $output); fclose($fp); } WP_CLI::success("Fieldgroup " . $title . " exported "); } } } else { //error seems to be returning and break out of my loop //WP_CLI::error( 'No field groups were found in the database' ); echo 'No field groups were found in the database'; echo ' '; } if (is_multisite()) { restore_current_blog(); } }
function generate() { // validate if (empty($_POST['acf_export_keys'])) { acf_add_admin_notice(__("No field groups selected", 'acf'), 'error'); return; } // vars $id_ref = array(); $json = array(); // construct JSON foreach ($_POST['acf_export_keys'] as $key) { // load field group $field_group = acf_get_field_group($key); // validate field group if (empty($field_group)) { continue; } // load fields $fields = acf_get_fields($field_group); // prepare fields $fields = acf_prepare_fields_for_export($fields); // add to field group $field_group['fields'] = $fields; // extract field group ID $id = acf_extract_var($field_group, 'ID'); // add to json array $json[] = $field_group; } // end foreach // update view $this->view = 'settings-export-generate'; $this->data['field_groups'] = $json; }
/** * Create a new ACF Commit * * @param $commit_message - Detailed Message describing change to ACF Field Group * @param int $post_id - Post ID of ACF Field Group */ public function create_commit($commit_message, $post_id = 0) { $_SESSION['commit-complete'] = true; $field_groups = acf_get_field_groups(); $exportJSON = array(); if (!empty($field_groups)) { foreach ($field_groups as $field_group) { $field_group['fields'] = acf_get_fields($field_group); $field_group['fields'] = acf_prepare_fields_for_export($field_group['fields']); acf_extract_var($field_group, 'ID'); $exportJSON[] = $field_group; } } $export = acf_json_encode($exportJSON); $commitID = wp_insert_post(array('post_type' => 'acf-commit', 'post_status' => 'publish', 'post_content' => $export, 'post_title' => 'ACF Revision: ' . date('Y-m-d h:i:s'))); update_field('commit_message', $commit_message, $commitID); update_field('acf_field_group', get_the_title($post_id), $commitID); }