WP_Theme_JSON::flatten_tree( array $tree, string $prefix = '', string $token = '--' )

This function’s access is marked private. This means it is not intended for use by plugin or theme developers, only in other core functions. It is listed here for completeness.

Given a tree, it creates a flattened one by merging the keys and binding the leaf values to the new keys.

Description

It also transforms camelCase names into kebab-case and substitutes ‘/’ by ‘-‘.

This is thought to be useful to generate CSS Custom Properties from a tree, although there’s nothing in the implementation of this function that requires that format.

For example, assuming the given prefix is ‘–wp’ and the token is ‘–‘, for this input tree:

{
  'some/property': 'value',
  'nestedProperty': {
    'sub-property': 'value'
  }
}

it’ll return this output:

{
  '--wp--some-property': 'value',
  '--wp--nested-property--sub-property': 'value'
}

Parameters

$tree

(array) (Required) Input tree to process.

$prefix

(string) (Optional) Prefix to prepend to each variable.

Default value: ''

$token

(string) (Optional) Token to use between levels.

Default value: '--'

Return

(array) The flattened tree.

Source

File: wp-includes/class-wp-theme-json.php

private static function flatten_tree( $tree, $prefix = '', $token = '--' ) {
		$result = array();
		foreach ( $tree as $property => $value ) {
			$new_key = $prefix . str_replace(
				'/',
				'-',
				strtolower( preg_replace( '/(?<!^)[A-Z]/', '-$0', $property ) ) // CamelCase to kebab-case.
			);

			if ( is_array( $value ) ) {
				$new_prefix = $new_key . $token;
				$result     = array_merge(
					$result,
					self::flatten_tree( $value, $new_prefix, $token )
				);
			} else {
				$result[ $new_key ] = $value;
			}
		}
		return $result;
	}

Changelog

Version Description
5.8.0 Introduced.

© 2003–2021 WordPress Foundation
Licensed under the GNU GPLv2+ License.
https://developer.wordpress.org/reference/classes/wp_theme_json/flatten_tree