Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
<?php
namespace DeliciousBrains\Admin;
use DeliciousBrains\DBI;
class ACF {
public function init() {
add_filter( 'acf/settings/save_json', array( $this, 'get_local_json_path' ) );
add_filter( 'acf/settings/load_json', array( $this, 'add_local_json_path' ) );
if ( ! WP_LOCAL_DEV ) {
// Only allow fields to be edited on development
add_filter( 'acf/settings/show_admin', '__return_false' );
}
add_action( 'admin_init', array( $this, 'sync_fields_with_json' ) );
}
/**
* Define where the local JSON is saved
*
* @return string
*/
public function get_local_json_path() {
return DBI::get_data_dir() . 'acf-json';
}
/**
* Add our path for the local JSON
*
* @param array $paths
*
* @return array
*/
public function add_local_json_path( $paths ) {
$paths[] = DBI::get_data_dir() . 'acf-json';
return $paths;
}
/**
* Automatically sync any JSON field configuration.
*/
public function sync_fields_with_json() {
if ( defined( 'DOING_AJAX' ) || defined( 'DOING_CRON' ) ) {
return;
}
if ( ! function_exists( 'acf_get_field_groups' ) ) {
return;
}
$groups = acf_get_field_groups();
if ( empty( $groups ) ) {
return;
}
$sync = array();
foreach ( $groups as $group ) {
$local = acf_maybe_get( $group, 'local', false );
$modified = acf_maybe_get( $group, 'modified', 0 );
$private = acf_maybe_get( $group, 'private', false );
if ( $local !== 'json' || $private ) {
// ignore DB / PHP / private field groups
continue;
}
if ( ! $group['ID'] ) {
$sync[ $group['key'] ] = $group;
} elseif ( $modified && $modified > get_post_modified_time( 'U', true, $group['ID'], true ) ) {
$sync[ $group['key'] ] = $group;
}
}
if ( empty( $sync ) ) {
return;
}
foreach ( $sync as $key => $v ) {
if ( acf_have_local_fields( $key ) ) {
$sync[ $key ]['fields'] = acf_get_local_fields( $key );
}
acf_import_field_group( $sync[ $key ] );
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.