Automattic\WooCommerce\Internal\Admin\Settings
SettingsUISchema::from_legacy_settings
Build a schema from a legacy WC settings array.
Method of the class: SettingsUISchema{}
No Hooks.
Returns
Array.
Usage
$result = SettingsUISchema::from_legacy_settings( $page_id, $section, $title, $settings, $default_save_adapter ): array;
- $page_id(string) (required)
- Settings page id.
- $section(string) (required)
- Section id. Empty string means the default section.
- $title(string) (required)
- Page title.
- $settings(array) (required)
- Legacy settings definitions.
- $default_save_adapter(string)
- Default save adapter.
Default:'form_post'
Changelog
| Since 10.9.0 | Introduced. |
SettingsUISchema::from_legacy_settings() SettingsUISchema::from legacy settings code WC 10.9.1
public static function from_legacy_settings( string $page_id, string $section, string $title, array $settings, string $default_save_adapter = 'form_post' ): array {
$groups = array();
$current_group = null;
$current_id = null;
$group_index = 0;
$visibility_controller = null;
foreach ( $settings as $setting ) {
if ( ! is_array( $setting ) ) {
continue;
}
$type = isset( $setting['type'] ) && is_string( $setting['type'] ) ? $setting['type'] : 'text';
if ( 'title' === $type ) {
$visibility_controller = null;
if ( $current_group && $current_id ) {
$groups[ $current_id ] = $current_group;
}
$current_id = isset( $setting['id'] ) && is_scalar( $setting['id'] ) && '' !== (string) $setting['id']
? (string) $setting['id']
: 'group_' . $group_index;
$current_group = array(
'id' => $current_id,
'title' => isset( $setting['title'] ) && is_scalar( $setting['title'] ) ? html_entity_decode( (string) $setting['title'], ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401 ) : '',
'description' => isset( $setting['desc'] ) && is_scalar( $setting['desc'] ) ? wp_kses_post( (string) $setting['desc'] ) : '',
'actions' => self::get_group_actions( $setting ),
'order' => isset( $setting['order'] ) ? (int) $setting['order'] : $group_index,
'fields' => array(),
);
++$group_index;
continue;
}
if ( 'sectionend' === $type ) {
$visibility_controller = null;
if ( $current_group && $current_id ) {
$groups[ $current_id ] = $current_group;
}
$current_group = null;
$current_id = null;
continue;
}
if ( empty( $setting['id'] ) ) {
continue;
}
if ( ! $current_group ) {
$current_id = self::DEFAULT_GROUP_ID;
$current_group = self::get_default_group( $group_index );
++$group_index;
}
$field = self::transform_legacy_field( $setting, $default_save_adapter, $visibility_controller );
if ( $field ) {
$current_group['fields'][] = $field;
}
if ( 'checkbox' === $type && 'option' === ( $setting['show_if_checked'] ?? null ) ) {
$visibility_controller = $field['id'] ?? null;
}
if ( 'end' === ( $setting['checkboxgroup'] ?? null ) ) {
$visibility_controller = null;
}
}
if ( $current_group && $current_id ) {
$groups[ $current_id ] = $current_group;
}
uasort(
$groups,
static function ( array $a, array $b ): int {
return ( $a['order'] ?? 999 ) <=> ( $b['order'] ?? 999 );
}
);
foreach ( $groups as $group_id => $group ) {
unset( $group['order'] );
$groups[ $group_id ] = $group;
}
$decoded_title = html_entity_decode( $title, ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401 );
return array(
'id' => $page_id,
'title' => $decoded_title,
'section' => '' === $section ? self::DEFAULT_GROUP_ID : $section,
'save' => array(
'adapter' => $default_save_adapter,
),
'shell' => array(
'title' => $decoded_title,
),
'groups' => $groups,
);
}