wp-includes/class-wp-theme-json.php:3815Gets the CSS rules for a particular block from theme.json.
$block_metadataarraystring public function get_styles_for_block( $block_metadata ) { $node = _wp_array_get( $this->theme_json, $block_metadata['path'], array() ); $use_root_padding = isset( $this->theme_json['settings']['useRootPaddingAwareAlignments'] ) && true === $this->theme_json['settings']['useRootPaddingAwareAlignments']; $selector = $block_metadata['selector']; $settings = $this->theme_json['settings'] ?? array(); $feature_declarations = static::get_feature_declarations_for_node( $block_metadata, $node ); $is_root_selector = static::ROOT_BLOCK_SELECTOR === $selector; $media_query = $block_metadata['media_query'] ?? null; $responsive_media_queries = static::get_viewport_media_queries( $settings['viewport'] ?? null ); // Update text indent selector for paragraph blocks based on the textIndent setting. $block_name = $block_metadata['name'] ?? null; $feature_declarations = static::update_paragraph_text_indent_selector( $feature_declarations, $settings, $block_name ); $block_elements = $block_metadata['elements'] ?? array(); // Update button width declarations for percentage values to use calc() with block gap. $feature_declarations = static::update_button_width_declarations( $feature_declarations, $settings ); // If there are style variations, generate the declarations for them, including any feature selectors the block may have. $style_variation_declarations = array(); $style_variation_custom_css = array(); $style_variation_responsive_css = array(); $style_variation_responsive_pseudo_css = array(); $style_variation_layout_metadata = array(); if ( ! $media_query && ! empty( $block_metadata['variations'] ) ) { foreach ( $block_metadata['variations'] as $style_variation ) { $style_variation_node = _wp_array_get( $this->theme_json, $style_variation['path'], array() ); // Generate any feature/subfeature style declarations for the current style variation. $variation_declarations = static::get_feature_declarations_for_node( $block_metadata, $style_variation_node ); // Update text indent selector for paragraph blocks based on the textIndent setting. $variation_declarations = static::update_paragraph_text_indent_selector( $variation_declarations, $settings, $block_name ); // Update button width declarations for percentage values to use calc() with block gap. $variation_declarations = static::update_button_width_declarations( $variation_declarations, $settings ); // Combine selectors with style variation's selector and add to overall style variation declarations. foreach ( $variation_declarations as $current_selector => $new_declarations ) { $combined_selectors = static::get_block_style_variation_feature_selector( $style_variation, $current_selector ); // Add the new declarations to the overall results under the modified selector. $style_variation_declarations[ $combined_selectors ] = $new_declarations; } // Compute declarations for remaining styles not covered by feature level selectors. $style_variation_declarations[ $style_variation['selector'] ] = static::compute_style_properties( $style_variation_node, $settings, null, $this->theme_json ); // Process pseudo-selectors for this variation (e.g., :hover, :focus) if ( isset( $block_metadata['name'] ) ) { $block_name = $block_metadata['name']; } elseif ( in_array( 'blocks', $block_metadata['path'], true ) && count( $block_metadata['path'] ) >= 3 ) { $block_name = static::get_block_name_from_metadata_path( $block_metadata ); } else { $block_name = null; } $variation_pseudo_declarations = $this->process_pseudo_selectors( $style_variation_node, $style_variation['selector'], $settings, $block_name, $block_metadata, $style_variation ); $style_variation_declarations = array_merge( $style_variation_declarations, $variation_pseudo_declarations ); // Store custom CSS for the style variation. if ( isset( $style_variation_node['css'] ) ) { $style_variation_custom_css[ $style_variation['selector'] ] = $this->process_blocks_custom_css( $style_variation_node['css'], $style_variation['selector'] ); } // Store variation metadata and node for layout styles generation. // Only store if the variation has blockGap defined. if ( isset( $style_variation_node['spacing']['blockGap'] ) ) { // Append block selector to the variation selector for proper targeting. $variation_metadata_with_selector = $style_variation; $variation_metadata_with_selector['selector'] = $style_variation['selector'] . $block_metadata['css']; $style_variation_layout_metadata[ $style_variation['selector'] ] = array( 'metadata' => $variation_metadata_with_selector, 'node' => $style_variation_node, ); } // Store responsive breakpoint CSS for the style variation. // This includes both base properties and feature-level selectors. $variation_responsive_css = ''; $variation_responsive_pseudo_css = '';Introduced in 6.1.0. Unchanged from 6.7.7 through 7.1.0.
Signature, return type and hooks compared across 5 parsed releases.
src/wp-includes/class-wp-theme-json.php, and regenerated for each WordPress release so it tracks the code rather than a snapshot of it.