Merged in feature/81-dev-dev01 (pull request #5)
auto-patch 81-dev-dev01-2023-12-05T22_45_26 * auto-patch 81-dev-dev01-2023-12-05T22_45_26
This commit is contained in:
@@ -203,6 +203,7 @@ class WP_Theme_JSON {
|
||||
* removed the `--wp--style--block-gap` property.
|
||||
* @since 6.2.0 Added `outline-*`, and `min-height` properties.
|
||||
* @since 6.3.0 Added `column-count` property.
|
||||
* @since 6.4.0 Added `writing-mode` property.
|
||||
*
|
||||
* @var array
|
||||
*/
|
||||
@@ -261,6 +262,7 @@ class WP_Theme_JSON {
|
||||
'text-transform' => array( 'typography', 'textTransform' ),
|
||||
'filter' => array( 'filter', 'duotone' ),
|
||||
'box-shadow' => array( 'shadow' ),
|
||||
'writing-mode' => array( 'typography', 'writingMode' ),
|
||||
);
|
||||
|
||||
/**
|
||||
@@ -340,12 +342,16 @@ class WP_Theme_JSON {
|
||||
* @since 6.2.0 Added `dimensions.minHeight`, 'shadow.presets', 'shadow.defaultPresets',
|
||||
* `position.fixed` and `position.sticky`.
|
||||
* @since 6.3.0 Added support for `typography.textColumns`, removed `layout.definitions`.
|
||||
*
|
||||
* @since 6.4.0 Added support for `layout.allowEditing`, `background.backgroundImage`,
|
||||
* `typography.writingMode`, `lightbox.enabled` and `lightbox.allowEditing`.
|
||||
* @var array
|
||||
*/
|
||||
const VALID_SETTINGS = array(
|
||||
'appearanceTools' => null,
|
||||
'useRootPaddingAwareAlignments' => null,
|
||||
'background' => array(
|
||||
'backgroundImage' => null,
|
||||
),
|
||||
'border' => array(
|
||||
'color' => null,
|
||||
'radius' => null,
|
||||
@@ -374,8 +380,13 @@ class WP_Theme_JSON {
|
||||
'minHeight' => null,
|
||||
),
|
||||
'layout' => array(
|
||||
'contentSize' => null,
|
||||
'wideSize' => null,
|
||||
'contentSize' => null,
|
||||
'wideSize' => null,
|
||||
'allowEditing' => null,
|
||||
),
|
||||
'lightbox' => array(
|
||||
'enabled' => null,
|
||||
'allowEditing' => null,
|
||||
),
|
||||
'position' => array(
|
||||
'fixed' => null,
|
||||
@@ -407,6 +418,7 @@ class WP_Theme_JSON {
|
||||
'textColumns' => null,
|
||||
'textDecoration' => null,
|
||||
'textTransform' => null,
|
||||
'writingMode' => null,
|
||||
),
|
||||
);
|
||||
|
||||
@@ -469,6 +481,7 @@ class WP_Theme_JSON {
|
||||
'textColumns' => null,
|
||||
'textDecoration' => null,
|
||||
'textTransform' => null,
|
||||
'writingMode' => null,
|
||||
),
|
||||
'css' => null,
|
||||
);
|
||||
@@ -545,11 +558,7 @@ class WP_Theme_JSON {
|
||||
public static function get_element_class_name( $element ) {
|
||||
$class_name = '';
|
||||
|
||||
/*
|
||||
* TODO: Replace array_key_exists() with isset() check once WordPress drops
|
||||
* support for PHP 5.6. See https://core.trac.wordpress.org/ticket/57067.
|
||||
*/
|
||||
if ( array_key_exists( $element, static::__EXPERIMENTAL_ELEMENT_CLASS_NAMES ) ) {
|
||||
if ( isset( static::__EXPERIMENTAL_ELEMENT_CLASS_NAMES[ $element ] ) ) {
|
||||
$class_name = static::__EXPERIMENTAL_ELEMENT_CLASS_NAMES[ $element ];
|
||||
}
|
||||
|
||||
@@ -561,9 +570,11 @@ class WP_Theme_JSON {
|
||||
*
|
||||
* @since 6.0.0
|
||||
* @since 6.2.0 Added `dimensions.minHeight` and `position.sticky`.
|
||||
* @since 6.4.0 Added `background.backgroundImage`.
|
||||
* @var array
|
||||
*/
|
||||
const APPEARANCE_TOOLS_OPT_INS = array(
|
||||
array( 'background', 'backgroundImage' ),
|
||||
array( 'border', 'color' ),
|
||||
array( 'border', 'radius' ),
|
||||
array( 'border', 'style' ),
|
||||
@@ -740,11 +751,7 @@ class WP_Theme_JSON {
|
||||
foreach ( $valid_element_names as $element ) {
|
||||
$schema_styles_elements[ $element ] = $styles_non_top_level;
|
||||
|
||||
/*
|
||||
* TODO: Replace array_key_exists() with isset() check once WordPress drops
|
||||
* support for PHP 5.6. See https://core.trac.wordpress.org/ticket/57067.
|
||||
*/
|
||||
if ( array_key_exists( $element, static::VALID_ELEMENT_PSEUDO_SELECTORS ) ) {
|
||||
if ( isset( static::VALID_ELEMENT_PSEUDO_SELECTORS[ $element ] ) ) {
|
||||
foreach ( static::VALID_ELEMENT_PSEUDO_SELECTORS[ $element ] as $pseudo_selector ) {
|
||||
$schema_styles_elements[ $element ][ $pseudo_selector ] = $styles_non_top_level;
|
||||
}
|
||||
@@ -916,7 +923,9 @@ class WP_Theme_JSON {
|
||||
|
||||
// Keep backwards compatibility for support.color.__experimentalDuotone.
|
||||
if ( null === $duotone_selector ) {
|
||||
$duotone_support = _wp_array_get( $block_type->supports, array( 'color', '__experimentalDuotone' ), null );
|
||||
$duotone_support = isset( $block_type->supports['color']['__experimentalDuotone'] )
|
||||
? $block_type->supports['color']['__experimentalDuotone']
|
||||
: null;
|
||||
|
||||
if ( $duotone_support ) {
|
||||
$root_selector = wp_get_block_css_selector( $block_type );
|
||||
@@ -1137,9 +1146,23 @@ class WP_Theme_JSON {
|
||||
// Split CSS nested rules.
|
||||
$parts = explode( '&', $css );
|
||||
foreach ( $parts as $part ) {
|
||||
$processed_css .= ( ! str_contains( $part, '{' ) )
|
||||
? trim( $selector ) . '{' . trim( $part ) . '}' // If the part doesn't contain braces, it applies to the root level.
|
||||
: trim( $selector . $part ); // Prepend the selector, which effectively replaces the "&" character.
|
||||
$is_root_css = ( ! str_contains( $part, '{' ) );
|
||||
if ( $is_root_css ) {
|
||||
// If the part doesn't contain braces, it applies to the root level.
|
||||
$processed_css .= trim( $selector ) . '{' . trim( $part ) . '}';
|
||||
} else {
|
||||
// If the part contains braces, it's a nested CSS rule.
|
||||
$part = explode( '{', str_replace( '}', '', $part ) );
|
||||
if ( count( $part ) !== 2 ) {
|
||||
continue;
|
||||
}
|
||||
$nested_selector = $part[0];
|
||||
$css_value = $part[1];
|
||||
$part_selector = str_starts_with( $nested_selector, ' ' )
|
||||
? static::scope_selector( $selector, $nested_selector )
|
||||
: static::append_to_selector( $selector, $nested_selector );
|
||||
$processed_css .= $part_selector . '{' . trim( $css_value ) . '}';
|
||||
}
|
||||
}
|
||||
return $processed_css;
|
||||
}
|
||||
@@ -1153,12 +1176,14 @@ class WP_Theme_JSON {
|
||||
*/
|
||||
public function get_custom_css() {
|
||||
// Add the global styles root CSS.
|
||||
$stylesheet = _wp_array_get( $this->theme_json, array( 'styles', 'css' ), '' );
|
||||
$stylesheet = isset( $this->theme_json['styles']['css'] ) ? $this->theme_json['styles']['css'] : '';
|
||||
|
||||
// Add the global styles block CSS.
|
||||
if ( isset( $this->theme_json['styles']['blocks'] ) ) {
|
||||
foreach ( $this->theme_json['styles']['blocks'] as $name => $node ) {
|
||||
$custom_block_css = _wp_array_get( $this->theme_json, array( 'styles', 'blocks', $name, 'css' ) );
|
||||
$custom_block_css = isset( $this->theme_json['styles']['blocks'][ $name ]['css'] )
|
||||
? $this->theme_json['styles']['blocks'][ $name ]['css']
|
||||
: null;
|
||||
if ( $custom_block_css ) {
|
||||
$selector = static::$blocks_metadata[ $name ]['selector'];
|
||||
$stylesheet .= $this->process_blocks_custom_css( $custom_block_css, $selector );
|
||||
@@ -1271,13 +1296,13 @@ class WP_Theme_JSON {
|
||||
|
||||
if ( isset( $block_metadata['name'] ) ) {
|
||||
$block_type = WP_Block_Type_Registry::get_instance()->get_registered( $block_metadata['name'] );
|
||||
if ( ! block_has_support( $block_type, array( 'layout' ), false ) && ! block_has_support( $block_type, array( '__experimentalLayout' ), false ) ) {
|
||||
if ( ! block_has_support( $block_type, 'layout', false ) && ! block_has_support( $block_type, '__experimentalLayout', false ) ) {
|
||||
return $block_rules;
|
||||
}
|
||||
}
|
||||
|
||||
$selector = isset( $block_metadata['selector'] ) ? $block_metadata['selector'] : '';
|
||||
$has_block_gap_support = _wp_array_get( $this->theme_json, array( 'settings', 'spacing', 'blockGap' ) ) !== null;
|
||||
$has_block_gap_support = isset( $this->theme_json['settings']['spacing']['blockGap'] );
|
||||
$has_fallback_gap_support = ! $has_block_gap_support; // This setting isn't useful yet: it exists as a placeholder for a future explicit fallback gap styles support.
|
||||
$node = _wp_array_get( $this->theme_json, $block_metadata['path'], array() );
|
||||
$layout_definitions = wp_get_layout_definitions();
|
||||
@@ -1293,7 +1318,9 @@ class WP_Theme_JSON {
|
||||
if ( ! $has_block_gap_support ) {
|
||||
$block_gap_value = static::ROOT_BLOCK_SELECTOR === $selector ? '0.5em' : null;
|
||||
if ( ! empty( $block_type ) ) {
|
||||
$block_gap_value = _wp_array_get( $block_type->supports, array( 'spacing', 'blockGap', '__experimentalDefault' ), null );
|
||||
$block_gap_value = isset( $block_type->supports['spacing']['blockGap']['__experimentalDefault'] )
|
||||
? $block_type->supports['spacing']['blockGap']['__experimentalDefault']
|
||||
: null;
|
||||
}
|
||||
} else {
|
||||
$block_gap_value = static::get_property_value( $node, array( 'spacing', 'blockGap' ) );
|
||||
@@ -1319,8 +1346,8 @@ class WP_Theme_JSON {
|
||||
continue;
|
||||
}
|
||||
|
||||
$class_name = sanitize_title( _wp_array_get( $layout_definition, array( 'className' ), false ) );
|
||||
$spacing_rules = _wp_array_get( $layout_definition, array( 'spacingStyles' ), array() );
|
||||
$class_name = isset( $layout_definition['className'] ) ? $layout_definition['className'] : false;
|
||||
$spacing_rules = isset( $layout_definition['spacingStyles'] ) ? $layout_definition['spacingStyles'] : array();
|
||||
|
||||
if (
|
||||
! empty( $class_name ) &&
|
||||
@@ -1376,8 +1403,8 @@ class WP_Theme_JSON {
|
||||
) {
|
||||
$valid_display_modes = array( 'block', 'flex', 'grid' );
|
||||
foreach ( $layout_definitions as $layout_definition ) {
|
||||
$class_name = sanitize_title( _wp_array_get( $layout_definition, array( 'className' ), false ) );
|
||||
$base_style_rules = _wp_array_get( $layout_definition, array( 'baseStyles' ), array() );
|
||||
$class_name = isset( $layout_definition['className'] ) ? $layout_definition['className'] : false;
|
||||
$base_style_rules = isset( $layout_definition['baseStyles'] ) ? $layout_definition['baseStyles'] : array();
|
||||
|
||||
if (
|
||||
! empty( $class_name ) &&
|
||||
@@ -1573,6 +1600,9 @@ class WP_Theme_JSON {
|
||||
|
||||
$stylesheet = '';
|
||||
foreach ( static::PRESETS_METADATA as $preset_metadata ) {
|
||||
if ( empty( $preset_metadata['classes'] ) ) {
|
||||
continue;
|
||||
}
|
||||
$slugs = static::get_settings_slugs( $settings, $preset_metadata, $origins );
|
||||
foreach ( $preset_metadata['classes'] as $class => $property ) {
|
||||
foreach ( $slugs as $slug ) {
|
||||
@@ -1770,6 +1800,9 @@ class WP_Theme_JSON {
|
||||
protected static function compute_preset_vars( $settings, $origins ) {
|
||||
$declarations = array();
|
||||
foreach ( static::PRESETS_METADATA as $preset_metadata ) {
|
||||
if ( empty( $preset_metadata['css_vars'] ) ) {
|
||||
continue;
|
||||
}
|
||||
$values_by_slug = static::get_settings_values_by_slug( $settings, $preset_metadata, $origins );
|
||||
foreach ( $values_by_slug as $slug => $value ) {
|
||||
$declarations[] = array(
|
||||
@@ -1799,7 +1832,7 @@ class WP_Theme_JSON {
|
||||
*/
|
||||
protected static function compute_theme_vars( $settings ) {
|
||||
$declarations = array();
|
||||
$custom_values = _wp_array_get( $settings, array( 'custom' ), array() );
|
||||
$custom_values = isset( $settings['custom'] ) ? $settings['custom'] : array();
|
||||
$css_vars = static::flatten_tree( $custom_values );
|
||||
foreach ( $css_vars as $key => $value ) {
|
||||
$declarations[] = array(
|
||||
@@ -1928,11 +1961,7 @@ class WP_Theme_JSON {
|
||||
if ( is_array( $value_path ) ) {
|
||||
$path_string = implode( '.', $value_path );
|
||||
if (
|
||||
/*
|
||||
* TODO: Replace array_key_exists() with isset() check once WordPress drops
|
||||
* support for PHP 5.6. See https://core.trac.wordpress.org/ticket/57067.
|
||||
*/
|
||||
array_key_exists( $path_string, static::PROTECTED_PROPERTIES ) &&
|
||||
isset( static::PROTECTED_PROPERTIES[ $path_string ] ) &&
|
||||
_wp_array_get( $settings, static::PROTECTED_PROPERTIES[ $path_string ], null ) === null
|
||||
) {
|
||||
continue;
|
||||
@@ -2136,12 +2165,8 @@ class WP_Theme_JSON {
|
||||
'selector' => static::ELEMENTS[ $element ],
|
||||
);
|
||||
|
||||
/*
|
||||
* Handle any pseudo selectors for the element.
|
||||
* TODO: Replace array_key_exists() with isset() check once WordPress drops
|
||||
* support for PHP 5.6. See https://core.trac.wordpress.org/ticket/57067.
|
||||
*/
|
||||
if ( array_key_exists( $element, static::VALID_ELEMENT_PSEUDO_SELECTORS ) ) {
|
||||
// Handle any pseudo selectors for the element.
|
||||
if ( isset( static::VALID_ELEMENT_PSEUDO_SELECTORS[ $element ] ) ) {
|
||||
foreach ( static::VALID_ELEMENT_PSEUDO_SELECTORS[ $element ] as $pseudo_selector ) {
|
||||
|
||||
if ( isset( $theme_json['styles']['elements'][ $element ][ $pseudo_selector ] ) ) {
|
||||
@@ -2290,12 +2315,8 @@ class WP_Theme_JSON {
|
||||
'selector' => $selectors[ $name ]['elements'][ $element ],
|
||||
);
|
||||
|
||||
/*
|
||||
* Handle any pseudo selectors for the element.
|
||||
* TODO: Replace array_key_exists() with isset() check once WordPress drops
|
||||
* support for PHP 5.6. See https://core.trac.wordpress.org/ticket/57067.
|
||||
*/
|
||||
if ( array_key_exists( $element, static::VALID_ELEMENT_PSEUDO_SELECTORS ) ) {
|
||||
// Handle any pseudo selectors for the element.
|
||||
if ( isset( static::VALID_ELEMENT_PSEUDO_SELECTORS[ $element ] ) ) {
|
||||
foreach ( static::VALID_ELEMENT_PSEUDO_SELECTORS[ $element ] as $pseudo_selector ) {
|
||||
if ( isset( $theme_json['styles']['blocks'][ $name ]['elements'][ $element ][ $pseudo_selector ] ) ) {
|
||||
$nodes[] = array(
|
||||
@@ -2325,7 +2346,7 @@ class WP_Theme_JSON {
|
||||
$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 = _wp_array_get( $this->theme_json, array( 'settings' ) );
|
||||
$settings = isset( $this->theme_json['settings'] ) ? $this->theme_json['settings'] : array();
|
||||
$feature_declarations = static::get_feature_declarations_for_node( $block_metadata, $node );
|
||||
|
||||
// If there are style variations, generate the declarations for them, including any feature selectors the block may have.
|
||||
@@ -2346,7 +2367,7 @@ class WP_Theme_JSON {
|
||||
// Prepend the variation selector to the current selector.
|
||||
$split_selectors = explode( ',', $shortened_selector );
|
||||
$updated_selectors = array_map(
|
||||
static function( $split_selector ) use ( $clean_style_variation_selector ) {
|
||||
static function ( $split_selector ) use ( $clean_style_variation_selector ) {
|
||||
return $clean_style_variation_selector . $split_selector;
|
||||
},
|
||||
$split_selectors
|
||||
@@ -2373,11 +2394,7 @@ class WP_Theme_JSON {
|
||||
|
||||
$element_pseudo_allowed = array();
|
||||
|
||||
/*
|
||||
* TODO: Replace array_key_exists() with isset() check once WordPress drops
|
||||
* support for PHP 5.6. See https://core.trac.wordpress.org/ticket/57067.
|
||||
*/
|
||||
if ( array_key_exists( $current_element, static::VALID_ELEMENT_PSEUDO_SELECTORS ) ) {
|
||||
if ( isset( static::VALID_ELEMENT_PSEUDO_SELECTORS[ $current_element ] ) ) {
|
||||
$element_pseudo_allowed = static::VALID_ELEMENT_PSEUDO_SELECTORS[ $current_element ];
|
||||
}
|
||||
|
||||
@@ -2388,7 +2405,7 @@ class WP_Theme_JSON {
|
||||
$pseudo_matches = array_values(
|
||||
array_filter(
|
||||
$element_pseudo_allowed,
|
||||
static function( $pseudo_selector ) use ( $selector ) {
|
||||
static function ( $pseudo_selector ) use ( $selector ) {
|
||||
return str_contains( $selector, $pseudo_selector );
|
||||
}
|
||||
)
|
||||
@@ -2402,11 +2419,7 @@ class WP_Theme_JSON {
|
||||
* Otherwise just compute the styles for the default selector as normal.
|
||||
*/
|
||||
if ( $pseudo_selector && isset( $node[ $pseudo_selector ] ) &&
|
||||
/*
|
||||
* TODO: Replace array_key_exists() with isset() check once WordPress drops
|
||||
* support for PHP 5.6. See https://core.trac.wordpress.org/ticket/57067.
|
||||
*/
|
||||
array_key_exists( $current_element, static::VALID_ELEMENT_PSEUDO_SELECTORS )
|
||||
isset( static::VALID_ELEMENT_PSEUDO_SELECTORS[ $current_element ] )
|
||||
&& in_array( $pseudo_selector, static::VALID_ELEMENT_PSEUDO_SELECTORS[ $current_element ], true )
|
||||
) {
|
||||
$declarations = static::compute_style_properties( $node[ $pseudo_selector ], $settings, null, $this->theme_json, $selector, $use_root_padding );
|
||||
@@ -2473,7 +2486,7 @@ class WP_Theme_JSON {
|
||||
*/
|
||||
public function get_root_layout_rules( $selector, $block_metadata ) {
|
||||
$css = '';
|
||||
$settings = _wp_array_get( $this->theme_json, array( 'settings' ) );
|
||||
$settings = isset( $this->theme_json['settings'] ) ? $this->theme_json['settings'] : array();
|
||||
$use_root_padding = isset( $this->theme_json['settings']['useRootPaddingAwareAlignments'] ) && true === $this->theme_json['settings']['useRootPaddingAwareAlignments'];
|
||||
|
||||
/*
|
||||
@@ -2507,13 +2520,13 @@ class WP_Theme_JSON {
|
||||
// Right and left padding are applied to the first container with `.has-global-padding` class.
|
||||
$css .= '.has-global-padding { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); }';
|
||||
// Nested containers with `.has-global-padding` class do not get padding.
|
||||
$css .= '.has-global-padding :where(.has-global-padding) { padding-right: 0; padding-left: 0; }';
|
||||
$css .= '.has-global-padding :where(.has-global-padding:not(.wp-block-block)) { padding-right: 0; padding-left: 0; }';
|
||||
// Alignfull children of the container with left and right padding have negative margins so they can still be full width.
|
||||
$css .= '.has-global-padding > .alignfull { margin-right: calc(var(--wp--style--root--padding-right) * -1); margin-left: calc(var(--wp--style--root--padding-left) * -1); }';
|
||||
// The above rule is negated for alignfull children of nested containers.
|
||||
$css .= '.has-global-padding :where(.has-global-padding) > .alignfull { margin-right: 0; margin-left: 0; }';
|
||||
$css .= '.has-global-padding :where(.has-global-padding:not(.wp-block-block)) > .alignfull { margin-right: 0; margin-left: 0; }';
|
||||
// Some of the children of alignfull blocks without content width should also get padding: text blocks and non-alignfull container blocks.
|
||||
$css .= '.has-global-padding > .alignfull:where(:not(.has-global-padding)) > :where([class*="wp-block-"]:not(.alignfull):not([class*="__"]),p,h1,h2,h3,h4,h5,h6,ul,ol) { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); }';
|
||||
$css .= '.has-global-padding > .alignfull:where(:not(.has-global-padding):not(.is-layout-flex):not(.is-layout-grid)) > :where([class*="wp-block-"]:not(.alignfull):not([class*="__"]),p,h1,h2,h3,h4,h5,h6,ul,ol) { padding-right: var(--wp--style--root--padding-right); padding-left: var(--wp--style--root--padding-left); }';
|
||||
// The above rule also has to be negated for blocks inside nested `.has-global-padding` blocks.
|
||||
$css .= '.has-global-padding :where(.has-global-padding) > .alignfull:where(:not(.has-global-padding)) > :where([class*="wp-block-"]:not(.alignfull):not([class*="__"]),p,h1,h2,h3,h4,h5,h6,ul,ol) { padding-right: 0; padding-left: 0; }';
|
||||
}
|
||||
@@ -2522,8 +2535,8 @@ class WP_Theme_JSON {
|
||||
$css .= '.wp-site-blocks > .alignright { float: right; margin-left: 2em; }';
|
||||
$css .= '.wp-site-blocks > .aligncenter { justify-content: center; margin-left: auto; margin-right: auto; }';
|
||||
|
||||
$block_gap_value = _wp_array_get( $this->theme_json, array( 'styles', 'spacing', 'blockGap' ), '0.5em' );
|
||||
$has_block_gap_support = _wp_array_get( $this->theme_json, array( 'settings', 'spacing', 'blockGap' ) ) !== null;
|
||||
$block_gap_value = isset( $this->theme_json['styles']['spacing']['blockGap'] ) ? $this->theme_json['styles']['spacing']['blockGap'] : '0.5em';
|
||||
$has_block_gap_support = isset( $this->theme_json['settings']['spacing']['blockGap'] );
|
||||
if ( $has_block_gap_support ) {
|
||||
$block_gap_value = static::get_property_value( $this->theme_json, array( 'styles', 'spacing', 'blockGap' ) );
|
||||
$css .= ":where(.wp-site-blocks) > * { margin-block-start: $block_gap_value; margin-block-end: 0; }";
|
||||
@@ -2713,7 +2726,7 @@ class WP_Theme_JSON {
|
||||
* @param array $theme_json The theme.json like structure to inspect.
|
||||
* @param array $path Path to inspect.
|
||||
* @param bool|array $override Data to compute whether to override the preset.
|
||||
* @return boolean
|
||||
* @return bool
|
||||
*/
|
||||
protected static function should_override_preset( $theme_json, $path, $override ) {
|
||||
_deprecated_function( __METHOD__, '6.0.0', 'get_metadata_boolean' );
|
||||
@@ -2849,6 +2862,7 @@ class WP_Theme_JSON {
|
||||
* Removes insecure data from theme.json.
|
||||
*
|
||||
* @since 5.9.0
|
||||
* @since 6.3.2 Preserves global styles block variations when securing styles.
|
||||
*
|
||||
* @param array $theme_json Structure to sanitize.
|
||||
* @return array Sanitized structure.
|
||||
@@ -2895,11 +2909,8 @@ class WP_Theme_JSON {
|
||||
/*
|
||||
* $output is stripped of pseudo selectors. Re-add and process them
|
||||
* or insecure styles here.
|
||||
*
|
||||
* TODO: Replace array_key_exists() with isset() check once WordPress drops
|
||||
* support for PHP 5.6. See https://core.trac.wordpress.org/ticket/57067.
|
||||
*/
|
||||
if ( array_key_exists( $current_element, static::VALID_ELEMENT_PSEUDO_SELECTORS ) ) {
|
||||
if ( isset( static::VALID_ELEMENT_PSEUDO_SELECTORS[ $current_element ] ) ) {
|
||||
foreach ( static::VALID_ELEMENT_PSEUDO_SELECTORS[ $current_element ] as $pseudo_selector ) {
|
||||
if ( isset( $input[ $pseudo_selector ] ) ) {
|
||||
$output[ $pseudo_selector ] = static::remove_insecure_styles( $input[ $pseudo_selector ] );
|
||||
@@ -2910,6 +2921,20 @@ class WP_Theme_JSON {
|
||||
if ( ! empty( $output ) ) {
|
||||
_wp_array_set( $sanitized, $metadata['path'], $output );
|
||||
}
|
||||
|
||||
if ( isset( $metadata['variations'] ) ) {
|
||||
foreach ( $metadata['variations'] as $variation ) {
|
||||
$variation_input = _wp_array_get( $theme_json, $variation['path'], array() );
|
||||
if ( empty( $variation_input ) ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$variation_output = static::remove_insecure_styles( $variation_input );
|
||||
if ( ! empty( $variation_output ) ) {
|
||||
_wp_array_set( $sanitized, $variation['path'], $variation_output );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$setting_nodes = static::get_setting_nodes( $theme_json );
|
||||
@@ -3350,7 +3375,9 @@ class WP_Theme_JSON {
|
||||
* @return null|void
|
||||
*/
|
||||
public function set_spacing_sizes() {
|
||||
$spacing_scale = _wp_array_get( $this->theme_json, array( 'settings', 'spacing', 'spacingScale' ), array() );
|
||||
$spacing_scale = isset( $this->theme_json['settings']['spacing']['spacingScale'] )
|
||||
? $this->theme_json['settings']['spacing']['spacingScale']
|
||||
: array();
|
||||
|
||||
if ( ! isset( $spacing_scale['steps'] )
|
||||
|| ! is_numeric( $spacing_scale['steps'] )
|
||||
@@ -3407,7 +3434,7 @@ class WP_Theme_JSON {
|
||||
}
|
||||
|
||||
if ( $below_midpoint_count < $steps_mid_point - 2 ) {
|
||||
$x_small_count++;
|
||||
++$x_small_count;
|
||||
}
|
||||
|
||||
$slug -= 10;
|
||||
@@ -3444,7 +3471,7 @@ class WP_Theme_JSON {
|
||||
}
|
||||
|
||||
if ( $above_midpoint_count > 1 ) {
|
||||
$x_large_count++;
|
||||
++$x_large_count;
|
||||
}
|
||||
|
||||
$slug += 10;
|
||||
@@ -3589,7 +3616,9 @@ class WP_Theme_JSON {
|
||||
return $declarations;
|
||||
}
|
||||
|
||||
$settings = _wp_array_get( $this->theme_json, array( 'settings' ) );
|
||||
$settings = isset( $this->theme_json['settings'] )
|
||||
? $this->theme_json['settings']
|
||||
: array();
|
||||
|
||||
foreach ( $metadata['selectors'] as $feature => $feature_selectors ) {
|
||||
/*
|
||||
@@ -3741,7 +3770,7 @@ class WP_Theme_JSON {
|
||||
$theme_vars = static::compute_theme_vars( $settings );
|
||||
$vars = array_reduce(
|
||||
array_merge( $preset_vars, $theme_vars ),
|
||||
function( $carry, $item ) {
|
||||
function ( $carry, $item ) {
|
||||
$name = $item['name'];
|
||||
$carry[ "var({$name})" ] = $item['value'];
|
||||
return $carry;
|
||||
|
||||
Reference in New Issue
Block a user