diff --git a/lib/acfwpcli.php b/lib/acfwpcli.php index 33a05dc..c598174 100644 --- a/lib/acfwpcli.php +++ b/lib/acfwpcli.php @@ -11,7 +11,7 @@ public function __construct() { public function actions() { if ( ! defined( 'WP_CLI' ) ) { - add_action( 'plugins_loaded', array( $this, 'add_runtime_fieldgroups' ) ); + add_action( 'acf/init', array( $this, 'add_runtime_fieldgroups' ) ); } } diff --git a/lib/acfwpcli/field.php b/lib/acfwpcli/field.php index 17868e4..3f022d3 100644 --- a/lib/acfwpcli/field.php +++ b/lib/acfwpcli/field.php @@ -4,7 +4,7 @@ class Field { - public static function import( $field, $field_group ) { + public static function import( $field, $field_group, &$order ) { $order = []; // add parent diff --git a/lib/acfwpcli/field_group.php b/lib/acfwpcli/field_group.php index 88bf2c5..d5f17b4 100644 --- a/lib/acfwpcli/field_group.php +++ b/lib/acfwpcli/field_group.php @@ -11,15 +11,25 @@ class FieldGroup { public static function import( $file ) { $field_groups = self::from_json_file( $file ); + $order = array(); foreach ( $field_groups as $field_group ) { $fields = acf_extract_var( $field_group, 'fields' ); $fields = acf_prepare_fields_for_import( $fields ); + $db_field_group = self::find_by_key($field_group['key']); + + if ($db_field_group) { + $field_group['ID'] = $db_field_group->ID; + } + $field_group = acf_update_field_group( $field_group ); + // add to order + $order[ $field_group['ID'] ] = 0; + foreach ( $fields as $field ) { - Field::import( $field, $field_group ); + Field::import( $field, $field_group, $order ); } } @@ -44,6 +54,15 @@ public static function find_by_name( $name ) { return $results; } + public static function find_by_key( $key ) { + global $wpdb; + $query = "SELECT * FROM {$wpdb->posts} WHERE post_type='acf-field-group' AND post_name = %s"; + + $results = $wpdb->get_row( $wpdb->prepare( $query, $key ) ); + + return $results; + } + public static function destroy( $id ) { global $wpdb; @@ -84,8 +103,7 @@ public static function to_array( $id ) { // prepare fields $fields = acf_prepare_fields_for_export( $fields ); - // extract field group ID - acf_extract_var( $field_group, 'ID' ); + $field_group['ID'] = false; // add to field group $field_group['fields'] = $fields;