<?php if( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly if( ! class_exists('ACF_Admin_Tool_Import') ) : class ACF_Admin_Tool_Import extends ACF_Admin_Tool { /** * initialize * * This function will initialize the admin tool * * @date 10/10/17 * @since 5.6.3 * * @param n/a * @return n/a */ function initialize() { // vars $this->name = 'import'; $this->title = __("Import Field Groups", 'acf'); $this->icon = 'dashicons-upload'; } /** * html * * This function will output the metabox HTML * * @date 10/10/17 * @since 5.6.3 * * @param n/a * @return n/a */ function html() { ?> <p><?php _e('Select the Advanced Custom Fields JSON file you would like to import. When you click the import button below, ACF will import the field groups.', 'acf'); ?></p> <div class="acf-fields"> <?php acf_render_field_wrap(array( 'label' => __('Select File', 'acf'), 'type' => 'file', 'name' => 'acf_import_file', 'value' => false, 'uploader' => 'basic', )); ?> </div> <p class="acf-submit"> <input type="submit" class="button button-primary" value="<?php _e('Import File', 'acf'); ?>" /> </p> <?php } /** * submit * * This function will run when the tool's form has been submit * * @date 10/10/17 * @since 5.6.3 * * @param n/a * @return n/a */ function submit() { // Check file size. if( empty($_FILES['acf_import_file']['size']) ) { return acf_add_admin_notice( __("No file selected", 'acf'), 'warning' ); } // Get file data. $file = $_FILES['acf_import_file']; // Check errors. if( $file['error'] ) { return acf_add_admin_notice( __("Error uploading file. Please try again", 'acf'), 'warning' ); } // Check file type. if( pathinfo($file['name'], PATHINFO_EXTENSION) !== 'json' ) { return acf_add_admin_notice( __("Incorrect file type", 'acf'), 'warning' ); } // Read JSON. $json = file_get_contents( $file['tmp_name'] ); $json = json_decode($json, true); // Check if empty. if( !$json || !is_array($json) ) { return acf_add_admin_notice( __("Import file empty", 'acf'), 'warning' ); } // Ensure $json is an array of groups. if( isset($json['key']) ) { $json = array( $json ); } // Remeber imported field group ids. $ids = array(); // Loop over json foreach( $json as $field_group ) { // Search database for existing field group. $post = acf_get_field_group_post( $field_group['key'] ); if( $post ) { $field_group['ID'] = $post->ID; } // Import field group. $field_group = acf_import_field_group( $field_group ); // append message $ids[] = $field_group['ID']; } // Count number of imported field groups. $total = count($ids); // Generate text. $text = sprintf( _n( 'Imported 1 field group', 'Imported %s field groups', $total, 'acf' ), $total ); // Add links to text. $links = array(); foreach( $ids as $id ) { $links[] = '<a href="' . get_edit_post_link( $id ) . '">' . get_the_title( $id ) . '</a>'; } $text .= ' ' . implode( ', ', $links ); // Add notice acf_add_admin_notice( $text, 'success' ); } } // initialize acf_register_admin_tool( 'ACF_Admin_Tool_Import' ); endif; // class_exists check ?>