label_count = _n_noop( 'Active (%s)', 'Active (%s)', 'acf' ); // reorder trash to end $wp_post_statuses['trash'] = acf_extract_var( $wp_post_statuses, 'trash' ); // check stuff $this->check_duplicate(); $this->check_sync(); // actions add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_scripts')); add_action('admin_footer', array($this, 'admin_footer')); // columns add_filter('manage_edit-acf-field-group_columns', array($this, 'field_group_columns'), 10, 1); add_action('manage_acf-field-group_posts_custom_column', array($this, 'field_group_columns_html'), 10, 2); } /* * admin_enqueue_scripts * * This function will add the already registered css * * @type function * @date 28/09/13 * @since 5.0.0 * * @param n/a * @return n/a */ function admin_enqueue_scripts() { wp_enqueue_script('acf-input'); } /* * check_duplicate * * This function will check for any $_GET data to duplicate * * @type function * @date 17/10/13 * @since 5.0.0 * * @param n/a * @return n/a */ function check_duplicate() { // message if( $ids = acf_maybe_get_GET('acfduplicatecomplete') ) { // explode $ids = explode(',', $ids); $total = count($ids); if( $total == 1 ) { acf_add_admin_notice( sprintf(__('Field group duplicated. %s', 'acf'), '' . get_the_title($ids[0]) . '') ); } else { acf_add_admin_notice( sprintf(_n( '%s field group duplicated.', '%s field groups duplicated.', $total, 'acf' ), $total) ); } } // vars $ids = array(); // check single if( $id = acf_maybe_get_GET('acfduplicate') ) { $ids[] = $id; // check multiple } elseif( acf_maybe_get_GET('action2') === 'acfduplicate' ) { $ids = acf_maybe_get_GET('post'); } // sync if( !empty($ids) ) { // validate check_admin_referer('bulk-posts'); // vars $new_ids = array(); // loop foreach( $ids as $id ) { // duplicate $field_group = acf_duplicate_field_group( $id ); // increase counter $new_ids[] = $field_group['ID']; } // redirect wp_redirect( admin_url( $this->url . '&acfduplicatecomplete=' . implode(',', $new_ids)) ); exit; } } /* * check_sync * * This function will check for any $_GET data to sync * * @type function * @date 9/12/2014 * @since 5.1.5 * * @param n/a * @return n/a */ function check_sync() { // message if( $ids = acf_maybe_get_GET('acfsynccomplete') ) { // explode $ids = explode(',', $ids); $total = count($ids); if( $total == 1 ) { acf_add_admin_notice( sprintf(__('Field group synchronised. %s', 'acf'), '' . get_the_title($ids[0]) . '') ); } else { acf_add_admin_notice( sprintf(_n( '%s field group synchronised.', '%s field groups synchronised.', $total, 'acf' ), $total) ); } } // vars $groups = acf_get_field_groups(); // bail early if no field groups if( empty($groups) ) return; // find JSON field groups which have not yet been imported foreach( $groups as $group ) { // vars $local = acf_maybe_get($group, 'local', false); $modified = acf_maybe_get($group, 'modified', 0); $private = acf_maybe_get($group, 'private', false); // ignore DB / PHP / private field groups if( $local !== 'json' || $private ) { // do nothing } elseif( !$group['ID'] ) { $this->sync[ $group['key'] ] = $group; } elseif( $modified && $modified > get_post_modified_time('U', true, $group['ID'], true) ) { $this->sync[ $group['key'] ] = $group; } } // bail if no sync needed if( empty($this->sync) ) return; // maybe sync $sync_keys = array(); // check single if( $key = acf_maybe_get_GET('acfsync') ) { $sync_keys[] = $key; // check multiple } elseif( acf_maybe_get_GET('action2') === 'acfsync' ) { $sync_keys = acf_maybe_get_GET('post'); } // sync if( !empty($sync_keys) ) { // validate check_admin_referer('bulk-posts'); // disable filters to ensure ACF loads raw data from DB acf_disable_filters(); acf_enable_filter('local'); // disable JSON // - this prevents a new JSON file being created and causing a 'change' to theme files - solves git anoyance acf_update_setting('json', false); // vars $new_ids = array(); // loop foreach( $sync_keys as $key ) { // append fields if( acf_have_local_fields($key) ) { $this->sync[ $key ]['fields'] = acf_get_local_fields( $key ); } // import $field_group = acf_import_field_group( $this->sync[ $key ] ); // append $new_ids[] = $field_group['ID']; } // redirect wp_redirect( admin_url( $this->url . '&acfsynccomplete=' . implode(',', $new_ids)) ); exit; } // filters add_filter('views_edit-acf-field-group', array($this, 'list_table_views')); } /* * list_table_views * * This function will add an extra link for JSON in the field group list table * * @type function * @date 3/12/2014 * @since 5.1.5 * * @param $views (array) * @return $views */ function list_table_views( $views ) { // vars $class = ''; $total = count($this->sync); // active if( acf_maybe_get_GET('post_status') === 'sync' ) { // actions add_action('admin_footer', array($this, 'sync_admin_footer'), 5); // set active class $class = ' class="current"'; // global global $wp_list_table; // update pagination $wp_list_table->set_pagination_args( array( 'total_items' => $total, 'total_pages' => 1, 'per_page' => $total )); } // add view $views['json'] = '' . __('Sync available', 'acf') . ' (' . $total . ')'; // return return $views; } /* * trashed_post * * This function is run when a post object is sent to the trash * * @type action (trashed_post) * @date 8/01/2014 * @since 5.0.0 * * @param $post_id (int) * @return n/a */ function trashed_post( $post_id ) { // validate post type if( get_post_type($post_id) != 'acf-field-group' ) { return; } // trash field group acf_trash_field_group( $post_id ); } /* * untrashed_post * * This function is run when a post object is restored from the trash * * @type action (untrashed_post) * @date 8/01/2014 * @since 5.0.0 * * @param $post_id (int) * @return n/a */ function untrashed_post( $post_id ) { // validate post type if( get_post_type($post_id) != 'acf-field-group' ) { return; } // trash field group acf_untrash_field_group( $post_id ); } /* * deleted_post * * This function is run when a post object is deleted from the trash * * @type action (deleted_post) * @date 8/01/2014 * @since 5.0.0 * * @param $post_id (int) * @return n/a */ function deleted_post( $post_id ) { // validate post type if( get_post_type($post_id) != 'acf-field-group' ) { return; } // trash field group acf_delete_field_group( $post_id ); } /* * field_group_columns * * This function will customize the columns for the field group table * * @type filter (manage_edit-acf-field-group_columns) * @date 28/09/13 * @since 5.0.0 * * @param $columns (array) * @return $columns (array) */ function field_group_columns( $columns ) { return array( 'cb' => '', 'title' => __('Title', 'acf'), 'acf-fg-description' => __('Description', 'acf'), 'acf-fg-status' => '', 'acf-fg-count' => __('Fields', 'acf'), ); } /* * field_group_columns_html * * This function will render the HTML for each table cell * * @type action (manage_acf-field-group_posts_custom_column) * @date 28/09/13 * @since 5.0.0 * * @param $column (string) * @param $post_id (int) * @return n/a */ function field_group_columns_html( $column, $post_id ) { // vars $field_group = acf_get_field_group( $post_id ); // render $this->render_column( $column, $field_group ); } function render_column( $column, $field_group ) { // description if( $column == 'acf-fg-description' ) { if( $field_group['description'] ) { echo '' . acf_esc_html($field_group['description']) . ''; } // status } elseif( $column == 'acf-fg-status' ) { if( isset($this->sync[ $field_group['key'] ]) ) { echo ' '; } if( $field_group['active'] ) { //echo ' '; } else { echo ' '; } // fields } elseif( $column == 'acf-fg-count' ) { echo esc_html( acf_get_field_count( $field_group ) ); } } /* * admin_footer * * This function will render extra HTML onto the page * * @type action (admin_footer) * @date 23/06/12 * @since 3.1.8 * * @param n/a * @return n/a */ function admin_footer() { // vars $url_home = 'https://www.advancedcustomfields.com'; $url_support = 'https://support.advancedcustomfields.com'; $icon = ''; ?>