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 = '';
?>