Changeset 58699
- Timestamp:
- 07/09/2024 04:06:20 PM (12 months ago)
- Location:
- branches/6.6
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/6.6
-
branches/6.6/src/wp-includes/block-supports/block-style-variations.php
r58466 r58699 41 41 } 42 42 43 /** 44 * Recursively resolves any `ref` values within a block style variation's data. 45 * 46 * @since 6.6.0 47 * @access private 48 * 49 * @param array $variation_data Reference to the variation data being processed. 50 * @param array $theme_json Theme.json data to retrieve referenced values from. 51 */ 52 function wp_resolve_block_style_variation_ref_values( &$variation_data, $theme_json ) { 53 foreach ( $variation_data as $key => &$value ) { 54 // Only need to potentially process arrays. 55 if ( is_array( $value ) ) { 56 // If ref value is set, attempt to find its matching value and update it. 57 if ( array_key_exists( 'ref', $value ) ) { 58 // Clean up any invalid ref value. 59 if ( empty( $value['ref'] ) || ! is_string( $value['ref'] ) ) { 60 unset( $variation_data[ $key ] ); 61 } 62 63 $value_path = explode( '.', $value['ref'] ?? '' ); 64 $ref_value = _wp_array_get( $theme_json, $value_path ); 65 66 // Only update the current value if the referenced path matched a value. 67 if ( null === $ref_value ) { 68 unset( $variation_data[ $key ] ); 69 } else { 70 $value = $ref_value; 71 } 72 } else { 73 // Recursively look for ref instances. 74 wp_resolve_block_style_variation_ref_values( $value, $theme_json ); 75 } 76 } 77 } 78 } 43 79 /** 44 80 * Render the block style variation's styles. … … 82 118 return $parsed_block; 83 119 } 120 121 /* 122 * Recursively resolve any ref values with the appropriate value within the 123 * theme_json data. 124 */ 125 wp_resolve_block_style_variation_ref_values( $variation_data, $theme_json ); 84 126 85 127 $variation_instance = wp_create_block_style_variation_instance_name( $parsed_block, $variation ); -
branches/6.6/tests/phpunit/tests/block-supports/block-style-variations.php
r58466 r58699 160 160 $this->assertSameSetsWithIndex( $expected, $group_styles, 'Variation data does not match' ); 161 161 } 162 163 /** 164 * Tests that block style variations resolve any `ref` values when generating styles. 165 * 166 * @ticket 61589 167 */ 168 public function test_block_style_variation_ref_values() { 169 switch_theme( 'block-theme' ); 170 171 $variation_data = array( 172 'color' => array( 173 'text' => array( 174 'ref' => 'styles.does-not-exist', 175 ), 176 'background' => array( 177 'ref' => 'styles.blocks.core/group.variations.block-style-variation-a.color.text', 178 ), 179 ), 180 'blocks' => array( 181 'core/heading' => array( 182 'color' => array( 183 'text' => array( 184 'ref' => 'styles.blocks.core/group.variations.block-style-variation-a.color.background', 185 ), 186 'background' => array( 187 'ref' => '', 188 ), 189 ), 190 ), 191 ), 192 'elements' => array( 193 'link' => array( 194 'color' => array( 195 'text' => array( 196 'ref' => 'styles.blocks.core/group.variations.block-style-variation-b.color.text', 197 ), 198 'background' => array( 199 'ref' => null, 200 ), 201 ), 202 ':hover' => array( 203 'color' => array( 204 'text' => array( 205 'ref' => 'styles.blocks.core/group.variations.block-style-variation-b.color.background', 206 ), 207 ), 208 ), 209 ), 210 ), 211 ); 212 213 $theme_json = WP_Theme_JSON_Resolver::get_theme_data()->get_raw_data(); 214 215 wp_resolve_block_style_variation_ref_values( $variation_data, $theme_json ); 216 217 $expected = array( 218 'color' => array( 'background' => 'plum' ), 219 'blocks' => array( 220 'core/heading' => array( 221 'color' => array( 'text' => 'indigo' ), 222 ), 223 ), 224 'elements' => array( 225 'link' => array( 226 'color' => array( 'text' => 'lightblue' ), 227 ':hover' => array( 228 'color' => array( 'text' => 'midnightblue' ), 229 ), 230 ), 231 ), 232 ); 233 234 $this->assertSameSetsWithIndex( $expected, $variation_data, 'Variation data with resolved ref values does not match' ); 235 } 162 236 }
Note: See TracChangeset
for help on using the changeset viewer.