diff --git a/src/Prefixer.php b/src/Prefixer.php new file mode 100644 index 0000000..989ad7d --- /dev/null +++ b/src/Prefixer.php @@ -0,0 +1,32 @@ +detect_post_type() !== 'meta-box' ) { return $this; } + $prefix = $this->lookup( [ 'prefix', 'settings.prefix' ], '' ); + + // If meta box is already parsed, normalize the fields array. if ( isset( $this->meta_box ) && is_array( $this->meta_box ) ) { // Fix: error on earlier versions that saved fields as object - $fields = array_values( $this->meta_box['fields'] ?? [] ); + $fields = $this->meta_box['fields'] ?? []; + $fields = array_values( $fields ); + + // Remove prefix from field IDs for the settings, that can be used for export, builder, local JSON. + Prefixer::remove( $fields, $prefix ); + $this->fields = $fields; + + // Add prefix to field IDs for parsed meta box, that's ready for registering. + Prefixer::add( $fields, $prefix ); $this->settings['meta_box']['fields'] = $fields; return $this; } + // If meta box is not parsed, normalize the fields array. + $fields = $this->fields ?: []; + $fields = array_values( $fields ); + + // Remove prefix from field IDs for the settings, that can be used for export, builder, local JSON. + Prefixer::remove( $fields, $prefix ); + $this->fields = $fields; + $meta_box = $this->get_settings(); + // Add prefix to field IDs for parsed meta box, that's ready for registering. + Prefixer::add( $fields, $prefix ); + $meta_box['fields'] = $fields; + foreach ( $this->get_unneeded_keys() as $key ) { unset( $meta_box[ $key ] ); } @@ -312,7 +350,7 @@ private function unparse_settings_page_tabs(): self { $tab_items = []; foreach ( $tabs as $key => $value ) { - $id = uniqid( 'tab_' ); + $id = uniqid( 'tab_' ); $tab_items[ $id ] = compact( 'id', 'key', 'value' ); }