Skip to content

Commit

Permalink
Performance: reuse block metadata in `WP_Theme_JSON::get_valid_block_…
Browse files Browse the repository at this point in the history
…style_variations()`

In `WP_Theme_JSON::get_valid_block_style_variations()`, the method was calling `self::get_blocks_metadata()` even though the metadata was already retrieved in the parent function. This update reuses the existing block metadata instead of calling it again.  

A new optional parameter, `$blocks_metadata`, has been added to the function, allowing it to use pre-fetched metadata when available, improving efficiency.  

Fewer `self::get_blocks_metadata()` calls mean faster processing, especially in themes with many blocks.

Props mukesh27, ramonopoly, aaronrobertshaw, flixos90.
Fixes #62291.




git-svn-id: https://develop.svn.wordpress.org/trunk@59359 602fd350-edb4-49c9-b593-d223f7449a82
  • Loading branch information
ramonjd committed Nov 6, 2024
1 parent eab73a7 commit 5ff9717
Showing 1 changed file with 11 additions and 6 deletions.
17 changes: 11 additions & 6 deletions src/wp-includes/class-wp-theme-json.php
Original file line number Diff line number Diff line change
Expand Up @@ -757,9 +757,10 @@ public function __construct( $theme_json = array( 'version' => self::LATEST_SCHE
}

$this->theme_json = WP_Theme_JSON_Schema::migrate( $theme_json, $origin );
$valid_block_names = array_keys( static::get_blocks_metadata() );
$blocks_metadata = static::get_blocks_metadata();
$valid_block_names = array_keys( $blocks_metadata );
$valid_element_names = array_keys( static::ELEMENTS );
$valid_variations = static::get_valid_block_style_variations();
$valid_variations = static::get_valid_block_style_variations( $blocks_metadata );
$this->theme_json = static::unwrap_shared_block_style_variations( $this->theme_json, $valid_variations );
$this->theme_json = static::sanitize( $this->theme_json, $valid_block_names, $valid_element_names, $valid_variations );
$this->theme_json = static::maybe_opt_in_into_settings( $this->theme_json );
Expand Down Expand Up @@ -3482,9 +3483,10 @@ public static function remove_insecure_properties( $theme_json, $origin = 'theme

$theme_json = WP_Theme_JSON_Schema::migrate( $theme_json, $origin );

$valid_block_names = array_keys( static::get_blocks_metadata() );
$blocks_metadata = static::get_blocks_metadata();
$valid_block_names = array_keys( $blocks_metadata );
$valid_element_names = array_keys( static::ELEMENTS );
$valid_variations = static::get_valid_block_style_variations();
$valid_variations = static::get_valid_block_style_variations( $blocks_metadata );

$theme_json = static::sanitize( $theme_json, $valid_block_names, $valid_element_names, $valid_variations );

Expand Down Expand Up @@ -4531,12 +4533,15 @@ function ( $matches ) use ( $variation_class ) {
* Collects valid block style variations keyed by block type.
*
* @since 6.6.0
* @since 6.8.0 Added the `$blocks_metadata` parameter.
*
* @param array $blocks_metadata Optional. List of metadata per block. Default is the metadata for all blocks.
* @return array Valid block style variations by block type.
*/
protected static function get_valid_block_style_variations() {
protected static function get_valid_block_style_variations( $blocks_metadata = array() ) {
$valid_variations = array();
foreach ( self::get_blocks_metadata() as $block_name => $block_meta ) {
$blocks_metadata = empty( $blocks_metadata ) ? static::get_blocks_metadata() : $blocks_metadata;
foreach ( $blocks_metadata as $block_name => $block_meta ) {
if ( ! isset( $block_meta['styleVariations'] ) ) {
continue;
}
Expand Down

0 comments on commit 5ff9717

Please sign in to comment.