Skip to content

Commit

Permalink
Theme JSON: include block style variations in path only output of get…
Browse files Browse the repository at this point in the history
…_block_nodes (WordPress#66948)

Follow up to WordPress#66002
Including variations in the nodes array when 'include_node_paths_only' => true

Co-authored-by: ramonjd <[email protected]>
Co-authored-by: aaronrobertshaw <[email protected]>
  • Loading branch information
3 people authored Nov 13, 2024
1 parent ee5aee9 commit d0a190b
Show file tree
Hide file tree
Showing 3 changed files with 93 additions and 1 deletion.
3 changes: 3 additions & 0 deletions backport-changelog/6.8/7784.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
https://github.com/WordPress/wordpress-develop/pull/7784

* https://github.com/WordPress/gutenberg/pull/66948
14 changes: 13 additions & 1 deletion lib/class-wp-theme-json-gutenberg.php
Original file line number Diff line number Diff line change
Expand Up @@ -2749,9 +2749,21 @@ private static function get_block_nodes( $theme_json, $selectors = array(), $opt
foreach ( $theme_json['styles']['blocks'] as $name => $node ) {
$node_path = array( 'styles', 'blocks', $name );
if ( $include_node_paths_only ) {
$nodes[] = array(
$variation_paths = array();
if ( $include_variations && isset( $node['variations'] ) ) {
foreach ( $node['variations'] as $variation => $variation_node ) {
$variation_paths[] = array(
'path' => array( 'styles', 'blocks', $name, 'variations', $variation ),
);
}
}
$node = array(
'path' => $node_path,
);
if ( ! empty( $variation_paths ) ) {
$node['variations'] = $variation_paths;
}
$nodes[] = $node;
} else {
$selector = null;
if ( isset( $selectors[ $name ]['selector'] ) ) {
Expand Down
77 changes: 77 additions & 0 deletions phpunit/class-wp-theme-json-test.php
Original file line number Diff line number Diff line change
Expand Up @@ -5955,4 +5955,81 @@ public function test_return_block_node_paths() {

$this->assertEquals( $expected, $block_nodes );
}

/**
* This test covers `get_block_nodes` with the `$include_node_paths_only`
* and `include_block_style_variations` options.
*/
public function test_return_block_node_paths_with_variations() {
$theme_json = new ReflectionClass( 'WP_Theme_JSON_Gutenberg' );

$func = $theme_json->getMethod( 'get_block_nodes' );
$func->setAccessible( true );

$theme_json = array(
'version' => WP_Theme_JSON_Gutenberg::LATEST_SCHEMA,
'styles' => array(
'typography' => array(
'fontSize' => '16px',
),
'blocks' => array(
'core/button' => array(
'color' => array(
'background' => 'red',
),
'variations' => array(
'cheese' => array(
'color' => array(
'background' => 'cheese',
),
),
),
),
'core/group' => array(
'color' => array(
'background' => 'blue',
),
'variations' => array(
'apricot' => array(
'color' => array(
'background' => 'apricot',
),
),
),
),
),
),
);

$block_nodes = $func->invoke(
null,
$theme_json,
array(),
array(
'include_node_paths_only' => true,
'include_block_style_variations' => true,
)
);

$expected = array(
array(
'path' => array( 'styles', 'blocks', 'core/button' ),
'variations' => array(
array(
'path' => array( 'styles', 'blocks', 'core/button', 'variations', 'cheese' ),
),
),
),
array(
'path' => array( 'styles', 'blocks', 'core/group' ),
'variations' => array(
array(
'path' => array( 'styles', 'blocks', 'core/group', 'variations', 'apricot' ),
),
),
),
);

$this->assertEquals( $expected, $block_nodes );
}
}

0 comments on commit d0a190b

Please sign in to comment.