From 346ea7a84bab81c3c9560d6432043b36d36e2738 Mon Sep 17 00:00:00 2001 From: David Toews Date: Fri, 17 Mar 2017 13:59:39 -0600 Subject: [PATCH 1/5] Delay adding of runtime field groups --- lib/acfwpcli.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/acfwpcli.php b/lib/acfwpcli.php index 33a05dc..633b1e8 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( 'after_setup_theme', array( $this, 'add_runtime_fieldgroups' ) ); } } From 0bc58c4b4935f5e5981b5585ddfff76747130845 Mon Sep 17 00:00:00 2001 From: David Toews Date: Wed, 5 Jul 2017 12:41:55 -0600 Subject: [PATCH 2/5] Preserve field order --- lib/acfwpcli/field.php | 2 +- lib/acfwpcli/field_group.php | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) 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..3a35d65 100644 --- a/lib/acfwpcli/field_group.php +++ b/lib/acfwpcli/field_group.php @@ -11,6 +11,7 @@ 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' ); @@ -18,8 +19,11 @@ public static function import( $file ) { $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 ); } } From 971576209b379bd596e416fa232889d7d5648e2a Mon Sep 17 00:00:00 2001 From: Sebastiaan de Geus Date: Thu, 23 Nov 2017 14:45:21 +0100 Subject: [PATCH 3/5] Prevent duplicate field groups on import --- lib/acfwpcli/field_group.php | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/lib/acfwpcli/field_group.php b/lib/acfwpcli/field_group.php index 88bf2c5..1dab24d 100644 --- a/lib/acfwpcli/field_group.php +++ b/lib/acfwpcli/field_group.php @@ -16,6 +16,12 @@ public static function import( $file ) { $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 ); foreach ( $fields as $field ) { @@ -44,6 +50,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 +99,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; From 28125074abd95f97844e16a8835173d6ce0c8b65 Mon Sep 17 00:00:00 2001 From: Sebastiaan de Geus Date: Thu, 30 Nov 2017 13:37:22 +0100 Subject: [PATCH 4/5] Load runtime groups on acf/init hook to allow registration of fields in themes --- lib/acfwpcli.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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' ) ); } } From 538f8c8f03ad6099f188c64d87eaa71b2b56f6e0 Mon Sep 17 00:00:00 2001 From: David Toews Date: Wed, 5 Jul 2017 12:41:55 -0600 Subject: [PATCH 5/5] Preserve field order --- lib/acfwpcli/field.php | 2 +- lib/acfwpcli/field_group.php | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) 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 1dab24d..d5f17b4 100644 --- a/lib/acfwpcli/field_group.php +++ b/lib/acfwpcli/field_group.php @@ -11,6 +11,7 @@ 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' ); @@ -24,8 +25,11 @@ public static function import( $file ) { $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 ); } }