plugin updates

This commit is contained in:
Tony Volpe
2024-11-15 13:53:04 -05:00
parent 1293d604ca
commit 0238f0c4ca
2009 changed files with 163492 additions and 89543 deletions

View File

@@ -243,62 +243,11 @@ function wp_get_global_stylesheet( $types = array() ) {
return $stylesheet;
}
/**
* Gets the global styles custom CSS from theme.json.
*
* @since 6.2.0
*
* @return string The global styles custom CSS.
*/
function wp_get_global_styles_custom_css() {
if ( ! wp_theme_has_theme_json() ) {
return '';
}
/*
* Ignore cache when the development mode is set to 'theme', so it doesn't interfere with the theme
* developer's workflow.
*/
$can_use_cached = ! wp_is_development_mode( 'theme' );
/*
* By using the 'theme_json' group, this data is marked to be non-persistent across requests.
* @see `wp_cache_add_non_persistent_groups()`.
*
* The rationale for this is to make sure derived data from theme.json
* is always fresh from the potential modifications done via hooks
* that can use dynamic data (modify the stylesheet depending on some option,
* settings depending on user permissions, etc.).
* See some of the existing hooks to modify theme.json behavior:
* @see https://make.wordpress.org/core/2022/10/10/filters-for-theme-json-data/
*
* A different alternative considered was to invalidate the cache upon certain
* events such as options add/update/delete, user meta, etc.
* It was judged not enough, hence this approach.
* @see https://github.com/WordPress/gutenberg/pull/45372
*/
$cache_key = 'wp_get_global_styles_custom_css';
$cache_group = 'theme_json';
if ( $can_use_cached ) {
$cached = wp_cache_get( $cache_key, $cache_group );
if ( $cached ) {
return $cached;
}
}
$tree = WP_Theme_JSON_Resolver::get_merged_data();
$stylesheet = $tree->get_custom_css();
if ( $can_use_cached ) {
wp_cache_set( $cache_key, $stylesheet, $cache_group );
}
return $stylesheet;
}
/**
* Adds global style rules to the inline style for each block.
*
* @since 6.1.0
* @since 6.7.0 Resolve relative paths in block styles.
*
* @global WP_Styles $wp_styles
*/
@@ -306,9 +255,48 @@ function wp_add_global_styles_for_blocks() {
global $wp_styles;
$tree = WP_Theme_JSON_Resolver::get_merged_data();
$tree = WP_Theme_JSON_Resolver::resolve_theme_file_uris( $tree );
$block_nodes = $tree->get_styles_block_nodes();
$can_use_cached = ! wp_is_development_mode( 'theme' );
$update_cache = false;
if ( $can_use_cached ) {
// Hash the merged WP_Theme_JSON data to bust cache on settings or styles change.
$cache_hash = md5( wp_json_encode( $tree->get_raw_data() ) );
$cache_key = 'wp_styles_for_blocks';
$cached = get_transient( $cache_key );
// Reset the cached data if there is no value or if the hash has changed.
if ( ! is_array( $cached ) || $cached['hash'] !== $cache_hash ) {
$cached = array(
'hash' => $cache_hash,
'blocks' => array(),
);
// Update the cache if the hash has changed.
$update_cache = true;
}
}
foreach ( $block_nodes as $metadata ) {
$block_css = $tree->get_styles_for_block( $metadata );
if ( $can_use_cached ) {
// Use the block name as the key for cached CSS data. Otherwise, use a hash of the metadata.
$cache_node_key = isset( $metadata['name'] ) ? $metadata['name'] : md5( wp_json_encode( $metadata ) );
if ( isset( $cached['blocks'][ $cache_node_key ] ) ) {
$block_css = $cached['blocks'][ $cache_node_key ];
} else {
$block_css = $tree->get_styles_for_block( $metadata );
$cached['blocks'][ $cache_node_key ] = $block_css;
// Update the cache if the cache contents have changed.
$update_cache = true;
}
} else {
$block_css = $tree->get_styles_for_block( $metadata );
}
if ( ! wp_should_load_separate_core_block_assets() ) {
wp_add_inline_style( 'global-styles', $block_css );
@@ -354,6 +342,10 @@ function wp_add_global_styles_for_blocks() {
}
}
}
if ( $update_cache ) {
set_transient( $cache_key, $cached );
}
}
/**