Skip to content

Instantly share code, notes, and snippets.

@elpuas
Forked from noahduncan/functions.php
Last active January 18, 2022 13:58
Show Gist options
  • Save elpuas/2427841d9fab890fdad13ca9d82b6e8c to your computer and use it in GitHub Desktop.
Save elpuas/2427841d9fab890fdad13ca9d82b6e8c to your computer and use it in GitHub Desktop.
Automatically Sync ACF Fields on dev environments
<?php
/*
Plugin Name: ACF Auto Sync
Plugin URI:
Description: Plugin that automatically syncs the database with local json
Version: 1.0
Author: Noah Duncan <[email protected]>
Updated by: Alfredo Navas <[email protected]>
*/
/**
* Function that will update ACF fields via JSON file update.
* It would be better to hook into ACF's own update function.
*/
function sync_acf_fields() {
error_log('syncing acf fields');
// vars
$groups = acf_get_field_groups();
$sync = array();
// 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' ] ) {
$sync[ $group[ 'key' ] ] = $group;
} elseif( $modified && $modified > get_post_modified_time( 'U', true, $group[ 'ID' ], true ) ) {
$sync[ $group[ 'key' ] ] = $group;
}
}
// bail if no sync needed
if( empty( $sync ) )
return;
if( ! empty( $sync ) ) { //if( ! empty( $keys ) ) {
// vars
$new_ids = array();
foreach( $sync as $key => $v ) { //foreach( $keys as $key ) {
// append fields
if( acf_have_local_fields( $key ) ) {
$sync[ $key ][ 'fields' ] = acf_get_local_fields( $key );
}
// import
$field_group = acf_import_field_group( $sync[ $key ] );
}
}
}
add_action( 'admin_init', 'sync_acf_fields' );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment