WP_Theme_JSON::flatten_tree() – Given a tree, it creates a flattened one by merging the keys and binding the leaf values to the new keys.

You appear to be a bot. Output may be restricted

Description

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

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'
  • }

Usage

$array = WP_Theme_JSON::flatten_tree( $tree, $prefix, $token );

Parameters

$tree
( array ) required – Input tree to process.
$prefix
( string ) optional – Optional. Prefix to prepend to each variable. Default empty string.
$token
( string ) optional default: — – Optional. Token to use between levels. Default '–'.

Returns

array The flattened tree.

Source

File name: wordpress/wp-includes/class-wp-theme-json.php
Lines:

1 to 21 of 21
  protected static function flatten_tree( $tree, $prefix = '', $token = '--' ) {
    $result = array();
    foreach ( $tree as $property => $value ) {
      $new_key = $prefix . str_replace(
        '/',
        '-',
        strtolower( _wp_to_kebab_case( $property ) )
      );

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

 View on GitHub View on Trac