Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93

Warning: Undefined array key "page_file_edit_line" in /home/sportsfever/public_html/filemanger/edit_text_line.php on line 32
/home/sportsfe.../httpdocs/wp-inclu...
File: class-wp-theme-json.php
),
[500] Fix | Delete
);
[501] Fix | Delete
[502] Fix | Delete
/**
[503] Fix | Delete
* The valid properties under the styles key.
[504] Fix | Delete
*
[505] Fix | Delete
* @since 5.8.0 As `ALLOWED_STYLES`.
[506] Fix | Delete
* @since 5.9.0 Renamed from `ALLOWED_STYLES` to `VALID_STYLES`,
[507] Fix | Delete
* added new properties for `border`, `filter`, `spacing`,
[508] Fix | Delete
* and `typography`.
[509] Fix | Delete
* @since 6.1.0 Added new side properties for `border`,
[510] Fix | Delete
* added new property `shadow`,
[511] Fix | Delete
* updated `blockGap` to be allowed at any level.
[512] Fix | Delete
* @since 6.2.0 Added `outline`, and `minHeight` properties.
[513] Fix | Delete
* @since 6.3.0 Added support for `typography.textColumns`.
[514] Fix | Delete
* @since 6.5.0 Added support for `dimensions.aspectRatio`.
[515] Fix | Delete
* @since 6.6.0 Added `background` sub properties to top-level only.
[516] Fix | Delete
*
[517] Fix | Delete
* @var array
[518] Fix | Delete
*/
[519] Fix | Delete
const VALID_STYLES = array(
[520] Fix | Delete
'background' => array(
[521] Fix | Delete
'backgroundImage' => 'top',
[522] Fix | Delete
'backgroundPosition' => 'top',
[523] Fix | Delete
'backgroundRepeat' => 'top',
[524] Fix | Delete
'backgroundSize' => 'top',
[525] Fix | Delete
),
[526] Fix | Delete
'border' => array(
[527] Fix | Delete
'color' => null,
[528] Fix | Delete
'radius' => null,
[529] Fix | Delete
'style' => null,
[530] Fix | Delete
'width' => null,
[531] Fix | Delete
'top' => null,
[532] Fix | Delete
'right' => null,
[533] Fix | Delete
'bottom' => null,
[534] Fix | Delete
'left' => null,
[535] Fix | Delete
),
[536] Fix | Delete
'color' => array(
[537] Fix | Delete
'background' => null,
[538] Fix | Delete
'gradient' => null,
[539] Fix | Delete
'text' => null,
[540] Fix | Delete
),
[541] Fix | Delete
'dimensions' => array(
[542] Fix | Delete
'aspectRatio' => null,
[543] Fix | Delete
'minHeight' => null,
[544] Fix | Delete
),
[545] Fix | Delete
'filter' => array(
[546] Fix | Delete
'duotone' => null,
[547] Fix | Delete
),
[548] Fix | Delete
'outline' => array(
[549] Fix | Delete
'color' => null,
[550] Fix | Delete
'offset' => null,
[551] Fix | Delete
'style' => null,
[552] Fix | Delete
'width' => null,
[553] Fix | Delete
),
[554] Fix | Delete
'shadow' => null,
[555] Fix | Delete
'spacing' => array(
[556] Fix | Delete
'margin' => null,
[557] Fix | Delete
'padding' => null,
[558] Fix | Delete
'blockGap' => null,
[559] Fix | Delete
),
[560] Fix | Delete
'typography' => array(
[561] Fix | Delete
'fontFamily' => null,
[562] Fix | Delete
'fontSize' => null,
[563] Fix | Delete
'fontStyle' => null,
[564] Fix | Delete
'fontWeight' => null,
[565] Fix | Delete
'letterSpacing' => null,
[566] Fix | Delete
'lineHeight' => null,
[567] Fix | Delete
'textAlign' => null,
[568] Fix | Delete
'textColumns' => null,
[569] Fix | Delete
'textDecoration' => null,
[570] Fix | Delete
'textTransform' => null,
[571] Fix | Delete
'writingMode' => null,
[572] Fix | Delete
),
[573] Fix | Delete
'css' => null,
[574] Fix | Delete
);
[575] Fix | Delete
[576] Fix | Delete
/**
[577] Fix | Delete
* Defines which pseudo selectors are enabled for which elements.
[578] Fix | Delete
*
[579] Fix | Delete
* The order of the selectors should be: link, any-link, visited, hover, focus, active.
[580] Fix | Delete
* This is to ensure the user action (hover, focus and active) styles have a higher
[581] Fix | Delete
* specificity than the visited styles, which in turn have a higher specificity than
[582] Fix | Delete
* the unvisited styles.
[583] Fix | Delete
*
[584] Fix | Delete
* See https://core.trac.wordpress.org/ticket/56928.
[585] Fix | Delete
* Note: this will affect both top-level and block-level elements.
[586] Fix | Delete
*
[587] Fix | Delete
* @since 6.1.0
[588] Fix | Delete
* @since 6.2.0 Added support for ':link' and ':any-link'.
[589] Fix | Delete
*/
[590] Fix | Delete
const VALID_ELEMENT_PSEUDO_SELECTORS = array(
[591] Fix | Delete
'link' => array( ':link', ':any-link', ':visited', ':hover', ':focus', ':active' ),
[592] Fix | Delete
'button' => array( ':link', ':any-link', ':visited', ':hover', ':focus', ':active' ),
[593] Fix | Delete
);
[594] Fix | Delete
[595] Fix | Delete
/**
[596] Fix | Delete
* The valid elements that can be found under styles.
[597] Fix | Delete
*
[598] Fix | Delete
* @since 5.8.0
[599] Fix | Delete
* @since 6.1.0 Added `heading`, `button`, and `caption` elements.
[600] Fix | Delete
* @var string[]
[601] Fix | Delete
*/
[602] Fix | Delete
const ELEMENTS = array(
[603] Fix | Delete
'link' => 'a:where(:not(.wp-element-button))', // The `where` is needed to lower the specificity.
[604] Fix | Delete
'heading' => 'h1, h2, h3, h4, h5, h6',
[605] Fix | Delete
'h1' => 'h1',
[606] Fix | Delete
'h2' => 'h2',
[607] Fix | Delete
'h3' => 'h3',
[608] Fix | Delete
'h4' => 'h4',
[609] Fix | Delete
'h5' => 'h5',
[610] Fix | Delete
'h6' => 'h6',
[611] Fix | Delete
// We have the .wp-block-button__link class so that this will target older buttons that have been serialized.
[612] Fix | Delete
'button' => '.wp-element-button, .wp-block-button__link',
[613] Fix | Delete
// The block classes are necessary to target older content that won't use the new class names.
[614] Fix | Delete
'caption' => '.wp-element-caption, .wp-block-audio figcaption, .wp-block-embed figcaption, .wp-block-gallery figcaption, .wp-block-image figcaption, .wp-block-table figcaption, .wp-block-video figcaption',
[615] Fix | Delete
'cite' => 'cite',
[616] Fix | Delete
);
[617] Fix | Delete
[618] Fix | Delete
const __EXPERIMENTAL_ELEMENT_CLASS_NAMES = array(
[619] Fix | Delete
'button' => 'wp-element-button',
[620] Fix | Delete
'caption' => 'wp-element-caption',
[621] Fix | Delete
);
[622] Fix | Delete
[623] Fix | Delete
/**
[624] Fix | Delete
* List of block support features that can have their related styles
[625] Fix | Delete
* generated under their own feature level selector rather than the block's.
[626] Fix | Delete
*
[627] Fix | Delete
* @since 6.1.0
[628] Fix | Delete
* @var string[]
[629] Fix | Delete
*/
[630] Fix | Delete
const BLOCK_SUPPORT_FEATURE_LEVEL_SELECTORS = array(
[631] Fix | Delete
'__experimentalBorder' => 'border',
[632] Fix | Delete
'color' => 'color',
[633] Fix | Delete
'spacing' => 'spacing',
[634] Fix | Delete
'typography' => 'typography',
[635] Fix | Delete
);
[636] Fix | Delete
[637] Fix | Delete
/**
[638] Fix | Delete
* Return the input schema at the root and per origin.
[639] Fix | Delete
*
[640] Fix | Delete
* @since 6.5.0
[641] Fix | Delete
*
[642] Fix | Delete
* @param array $schema The base schema.
[643] Fix | Delete
* @return array The schema at the root and per origin.
[644] Fix | Delete
*
[645] Fix | Delete
* Example:
[646] Fix | Delete
* schema_in_root_and_per_origin(
[647] Fix | Delete
* array(
[648] Fix | Delete
* 'fontFamily' => null,
[649] Fix | Delete
* 'slug' => null,
[650] Fix | Delete
* )
[651] Fix | Delete
* )
[652] Fix | Delete
*
[653] Fix | Delete
* Returns:
[654] Fix | Delete
* array(
[655] Fix | Delete
* 'fontFamily' => null,
[656] Fix | Delete
* 'slug' => null,
[657] Fix | Delete
* 'default' => array(
[658] Fix | Delete
* 'fontFamily' => null,
[659] Fix | Delete
* 'slug' => null,
[660] Fix | Delete
* ),
[661] Fix | Delete
* 'blocks' => array(
[662] Fix | Delete
* 'fontFamily' => null,
[663] Fix | Delete
* 'slug' => null,
[664] Fix | Delete
* ),
[665] Fix | Delete
* 'theme' => array(
[666] Fix | Delete
* 'fontFamily' => null,
[667] Fix | Delete
* 'slug' => null,
[668] Fix | Delete
* ),
[669] Fix | Delete
* 'custom' => array(
[670] Fix | Delete
* 'fontFamily' => null,
[671] Fix | Delete
* 'slug' => null,
[672] Fix | Delete
* ),
[673] Fix | Delete
* )
[674] Fix | Delete
*/
[675] Fix | Delete
protected static function schema_in_root_and_per_origin( $schema ) {
[676] Fix | Delete
$schema_in_root_and_per_origin = $schema;
[677] Fix | Delete
foreach ( static::VALID_ORIGINS as $origin ) {
[678] Fix | Delete
$schema_in_root_and_per_origin[ $origin ] = $schema;
[679] Fix | Delete
}
[680] Fix | Delete
return $schema_in_root_and_per_origin;
[681] Fix | Delete
}
[682] Fix | Delete
[683] Fix | Delete
/**
[684] Fix | Delete
* Returns a class name by an element name.
[685] Fix | Delete
*
[686] Fix | Delete
* @since 6.1.0
[687] Fix | Delete
*
[688] Fix | Delete
* @param string $element The name of the element.
[689] Fix | Delete
* @return string The name of the class.
[690] Fix | Delete
*/
[691] Fix | Delete
public static function get_element_class_name( $element ) {
[692] Fix | Delete
$class_name = '';
[693] Fix | Delete
[694] Fix | Delete
if ( isset( static::__EXPERIMENTAL_ELEMENT_CLASS_NAMES[ $element ] ) ) {
[695] Fix | Delete
$class_name = static::__EXPERIMENTAL_ELEMENT_CLASS_NAMES[ $element ];
[696] Fix | Delete
}
[697] Fix | Delete
[698] Fix | Delete
return $class_name;
[699] Fix | Delete
}
[700] Fix | Delete
[701] Fix | Delete
/**
[702] Fix | Delete
* Options that settings.appearanceTools enables.
[703] Fix | Delete
*
[704] Fix | Delete
* @since 6.0.0
[705] Fix | Delete
* @since 6.2.0 Added `dimensions.minHeight` and `position.sticky`.
[706] Fix | Delete
* @since 6.4.0 Added `background.backgroundImage`.
[707] Fix | Delete
* @since 6.5.0 Added `background.backgroundSize` and `dimensions.aspectRatio`.
[708] Fix | Delete
* @var array
[709] Fix | Delete
*/
[710] Fix | Delete
const APPEARANCE_TOOLS_OPT_INS = array(
[711] Fix | Delete
array( 'background', 'backgroundImage' ),
[712] Fix | Delete
array( 'background', 'backgroundSize' ),
[713] Fix | Delete
array( 'border', 'color' ),
[714] Fix | Delete
array( 'border', 'radius' ),
[715] Fix | Delete
array( 'border', 'style' ),
[716] Fix | Delete
array( 'border', 'width' ),
[717] Fix | Delete
array( 'color', 'link' ),
[718] Fix | Delete
array( 'color', 'heading' ),
[719] Fix | Delete
array( 'color', 'button' ),
[720] Fix | Delete
array( 'color', 'caption' ),
[721] Fix | Delete
array( 'dimensions', 'aspectRatio' ),
[722] Fix | Delete
array( 'dimensions', 'minHeight' ),
[723] Fix | Delete
array( 'position', 'sticky' ),
[724] Fix | Delete
array( 'spacing', 'blockGap' ),
[725] Fix | Delete
array( 'spacing', 'margin' ),
[726] Fix | Delete
array( 'spacing', 'padding' ),
[727] Fix | Delete
array( 'typography', 'lineHeight' ),
[728] Fix | Delete
);
[729] Fix | Delete
[730] Fix | Delete
/**
[731] Fix | Delete
* The latest version of the schema in use.
[732] Fix | Delete
*
[733] Fix | Delete
* @since 5.8.0
[734] Fix | Delete
* @since 5.9.0 Changed value from 1 to 2.
[735] Fix | Delete
* @since 6.6.0 Changed value from 2 to 3.
[736] Fix | Delete
* @var int
[737] Fix | Delete
*/
[738] Fix | Delete
const LATEST_SCHEMA = 3;
[739] Fix | Delete
[740] Fix | Delete
/**
[741] Fix | Delete
* Constructor.
[742] Fix | Delete
*
[743] Fix | Delete
* @since 5.8.0
[744] Fix | Delete
* @since 6.6.0 Key spacingScale by origin, and Pre-generate the spacingSizes from spacingScale.
[745] Fix | Delete
* Added unwrapping of shared block style variations into block type variations if registered.
[746] Fix | Delete
*
[747] Fix | Delete
* @param array $theme_json A structure that follows the theme.json schema.
[748] Fix | Delete
* @param string $origin Optional. What source of data this object represents.
[749] Fix | Delete
* One of 'blocks', 'default', 'theme', or 'custom'. Default 'theme'.
[750] Fix | Delete
*/
[751] Fix | Delete
public function __construct( $theme_json = array( 'version' => self::LATEST_SCHEMA ), $origin = 'theme' ) {
[752] Fix | Delete
if ( ! in_array( $origin, static::VALID_ORIGINS, true ) ) {
[753] Fix | Delete
$origin = 'theme';
[754] Fix | Delete
}
[755] Fix | Delete
[756] Fix | Delete
$this->theme_json = WP_Theme_JSON_Schema::migrate( $theme_json, $origin );
[757] Fix | Delete
$valid_block_names = array_keys( static::get_blocks_metadata() );
[758] Fix | Delete
$valid_element_names = array_keys( static::ELEMENTS );
[759] Fix | Delete
$valid_variations = static::get_valid_block_style_variations();
[760] Fix | Delete
$this->theme_json = static::unwrap_shared_block_style_variations( $this->theme_json, $valid_variations );
[761] Fix | Delete
$this->theme_json = static::sanitize( $this->theme_json, $valid_block_names, $valid_element_names, $valid_variations );
[762] Fix | Delete
$this->theme_json = static::maybe_opt_in_into_settings( $this->theme_json );
[763] Fix | Delete
[764] Fix | Delete
// Internally, presets are keyed by origin.
[765] Fix | Delete
$nodes = static::get_setting_nodes( $this->theme_json );
[766] Fix | Delete
foreach ( $nodes as $node ) {
[767] Fix | Delete
foreach ( static::PRESETS_METADATA as $preset_metadata ) {
[768] Fix | Delete
$path = $node['path'];
[769] Fix | Delete
foreach ( $preset_metadata['path'] as $subpath ) {
[770] Fix | Delete
$path[] = $subpath;
[771] Fix | Delete
}
[772] Fix | Delete
$preset = _wp_array_get( $this->theme_json, $path, null );
[773] Fix | Delete
if ( null !== $preset ) {
[774] Fix | Delete
// If the preset is not already keyed by origin.
[775] Fix | Delete
if ( isset( $preset[0] ) || empty( $preset ) ) {
[776] Fix | Delete
_wp_array_set( $this->theme_json, $path, array( $origin => $preset ) );
[777] Fix | Delete
}
[778] Fix | Delete
}
[779] Fix | Delete
}
[780] Fix | Delete
}
[781] Fix | Delete
[782] Fix | Delete
// In addition to presets, spacingScale (which generates presets) is also keyed by origin.
[783] Fix | Delete
$scale_path = array( 'settings', 'spacing', 'spacingScale' );
[784] Fix | Delete
$spacing_scale = _wp_array_get( $this->theme_json, $scale_path, null );
[785] Fix | Delete
if ( null !== $spacing_scale ) {
[786] Fix | Delete
// If the spacingScale is not already keyed by origin.
[787] Fix | Delete
if ( empty( array_intersect( array_keys( $spacing_scale ), static::VALID_ORIGINS ) ) ) {
[788] Fix | Delete
_wp_array_set( $this->theme_json, $scale_path, array( $origin => $spacing_scale ) );
[789] Fix | Delete
}
[790] Fix | Delete
}
[791] Fix | Delete
[792] Fix | Delete
// Pre-generate the spacingSizes from spacingScale.
[793] Fix | Delete
$scale_path = array( 'settings', 'spacing', 'spacingScale', $origin );
[794] Fix | Delete
$spacing_scale = _wp_array_get( $this->theme_json, $scale_path, null );
[795] Fix | Delete
if ( isset( $spacing_scale ) ) {
[796] Fix | Delete
$sizes_path = array( 'settings', 'spacing', 'spacingSizes', $origin );
[797] Fix | Delete
$spacing_sizes = _wp_array_get( $this->theme_json, $sizes_path, array() );
[798] Fix | Delete
$spacing_scale_sizes = static::compute_spacing_sizes( $spacing_scale );
[799] Fix | Delete
$merged_spacing_sizes = static::merge_spacing_sizes( $spacing_scale_sizes, $spacing_sizes );
[800] Fix | Delete
_wp_array_set( $this->theme_json, $sizes_path, $merged_spacing_sizes );
[801] Fix | Delete
}
[802] Fix | Delete
}
[803] Fix | Delete
[804] Fix | Delete
/**
[805] Fix | Delete
* Unwraps shared block style variations.
[806] Fix | Delete
*
[807] Fix | Delete
* It takes the shared variations (styles.variations.variationName) and
[808] Fix | Delete
* applies them to all the blocks that have the given variation registered
[809] Fix | Delete
* (styles.blocks.blockType.variations.variationName).
[810] Fix | Delete
*
[811] Fix | Delete
* For example, given the `core/paragraph` and `core/group` blocks have
[812] Fix | Delete
* registered the `section-a` style variation, and given the following input:
[813] Fix | Delete
*
[814] Fix | Delete
* {
[815] Fix | Delete
* "styles": {
[816] Fix | Delete
* "variations": {
[817] Fix | Delete
* "section-a": { "color": { "background": "backgroundColor" } }
[818] Fix | Delete
* }
[819] Fix | Delete
* }
[820] Fix | Delete
* }
[821] Fix | Delete
*
[822] Fix | Delete
* It returns the following output:
[823] Fix | Delete
*
[824] Fix | Delete
* {
[825] Fix | Delete
* "styles": {
[826] Fix | Delete
* "blocks": {
[827] Fix | Delete
* "core/paragraph": {
[828] Fix | Delete
* "variations": {
[829] Fix | Delete
* "section-a": { "color": { "background": "backgroundColor" } }
[830] Fix | Delete
* },
[831] Fix | Delete
* },
[832] Fix | Delete
* "core/group": {
[833] Fix | Delete
* "variations": {
[834] Fix | Delete
* "section-a": { "color": { "background": "backgroundColor" } }
[835] Fix | Delete
* }
[836] Fix | Delete
* }
[837] Fix | Delete
* }
[838] Fix | Delete
* }
[839] Fix | Delete
* }
[840] Fix | Delete
*
[841] Fix | Delete
* @since 6.6.0
[842] Fix | Delete
*
[843] Fix | Delete
* @param array $theme_json A structure that follows the theme.json schema.
[844] Fix | Delete
* @param array $valid_variations Valid block style variations.
[845] Fix | Delete
* @return array Theme json data with shared variation definitions unwrapped under appropriate block types.
[846] Fix | Delete
*/
[847] Fix | Delete
private static function unwrap_shared_block_style_variations( $theme_json, $valid_variations ) {
[848] Fix | Delete
if ( empty( $theme_json['styles']['variations'] ) || empty( $valid_variations ) ) {
[849] Fix | Delete
return $theme_json;
[850] Fix | Delete
}
[851] Fix | Delete
[852] Fix | Delete
$new_theme_json = $theme_json;
[853] Fix | Delete
$variations = $new_theme_json['styles']['variations'];
[854] Fix | Delete
[855] Fix | Delete
foreach ( $valid_variations as $block_type => $registered_variations ) {
[856] Fix | Delete
foreach ( $registered_variations as $variation_name ) {
[857] Fix | Delete
$block_level_data = $new_theme_json['styles']['blocks'][ $block_type ]['variations'][ $variation_name ] ?? array();
[858] Fix | Delete
$top_level_data = $variations[ $variation_name ] ?? array();
[859] Fix | Delete
$merged_data = array_replace_recursive( $top_level_data, $block_level_data );
[860] Fix | Delete
if ( ! empty( $merged_data ) ) {
[861] Fix | Delete
_wp_array_set( $new_theme_json, array( 'styles', 'blocks', $block_type, 'variations', $variation_name ), $merged_data );
[862] Fix | Delete
}
[863] Fix | Delete
}
[864] Fix | Delete
}
[865] Fix | Delete
[866] Fix | Delete
unset( $new_theme_json['styles']['variations'] );
[867] Fix | Delete
[868] Fix | Delete
return $new_theme_json;
[869] Fix | Delete
}
[870] Fix | Delete
[871] Fix | Delete
/**
[872] Fix | Delete
* Enables some opt-in settings if theme declared support.
[873] Fix | Delete
*
[874] Fix | Delete
* @since 5.9.0
[875] Fix | Delete
*
[876] Fix | Delete
* @param array $theme_json A theme.json structure to modify.
[877] Fix | Delete
* @return array The modified theme.json structure.
[878] Fix | Delete
*/
[879] Fix | Delete
protected static function maybe_opt_in_into_settings( $theme_json ) {
[880] Fix | Delete
$new_theme_json = $theme_json;
[881] Fix | Delete
[882] Fix | Delete
if (
[883] Fix | Delete
isset( $new_theme_json['settings']['appearanceTools'] ) &&
[884] Fix | Delete
true === $new_theme_json['settings']['appearanceTools']
[885] Fix | Delete
) {
[886] Fix | Delete
static::do_opt_in_into_settings( $new_theme_json['settings'] );
[887] Fix | Delete
}
[888] Fix | Delete
[889] Fix | Delete
if ( isset( $new_theme_json['settings']['blocks'] ) && is_array( $new_theme_json['settings']['blocks'] ) ) {
[890] Fix | Delete
foreach ( $new_theme_json['settings']['blocks'] as &$block ) {
[891] Fix | Delete
if ( isset( $block['appearanceTools'] ) && ( true === $block['appearanceTools'] ) ) {
[892] Fix | Delete
static::do_opt_in_into_settings( $block );
[893] Fix | Delete
}
[894] Fix | Delete
}
[895] Fix | Delete
}
[896] Fix | Delete
[897] Fix | Delete
return $new_theme_json;
[898] Fix | Delete
}
[899] Fix | Delete
[900] Fix | Delete
/**
[901] Fix | Delete
* Enables some settings.
[902] Fix | Delete
*
[903] Fix | Delete
* @since 5.9.0
[904] Fix | Delete
*
[905] Fix | Delete
* @param array $context The context to which the settings belong.
[906] Fix | Delete
*/
[907] Fix | Delete
protected static function do_opt_in_into_settings( &$context ) {
[908] Fix | Delete
foreach ( static::APPEARANCE_TOOLS_OPT_INS as $path ) {
[909] Fix | Delete
/*
[910] Fix | Delete
* Use "unset prop" as a marker instead of "null" because
[911] Fix | Delete
* "null" can be a valid value for some props (e.g. blockGap).
[912] Fix | Delete
*/
[913] Fix | Delete
if ( 'unset prop' === _wp_array_get( $context, $path, 'unset prop' ) ) {
[914] Fix | Delete
_wp_array_set( $context, $path, true );
[915] Fix | Delete
}
[916] Fix | Delete
}
[917] Fix | Delete
[918] Fix | Delete
unset( $context['appearanceTools'] );
[919] Fix | Delete
}
[920] Fix | Delete
[921] Fix | Delete
/**
[922] Fix | Delete
* Sanitizes the input according to the schemas.
[923] Fix | Delete
*
[924] Fix | Delete
* @since 5.8.0
[925] Fix | Delete
* @since 5.9.0 Added the `$valid_block_names` and `$valid_element_name` parameters.
[926] Fix | Delete
* @since 6.3.0 Added the `$valid_variations` parameter.
[927] Fix | Delete
* @since 6.6.0 Updated schema to allow extended block style variations.
[928] Fix | Delete
*
[929] Fix | Delete
* @param array $input Structure to sanitize.
[930] Fix | Delete
* @param array $valid_block_names List of valid block names.
[931] Fix | Delete
* @param array $valid_element_names List of valid element names.
[932] Fix | Delete
* @param array $valid_variations List of valid variations per block.
[933] Fix | Delete
* @return array The sanitized output.
[934] Fix | Delete
*/
[935] Fix | Delete
protected static function sanitize( $input, $valid_block_names, $valid_element_names, $valid_variations ) {
[936] Fix | Delete
[937] Fix | Delete
$output = array();
[938] Fix | Delete
[939] Fix | Delete
if ( ! is_array( $input ) ) {
[940] Fix | Delete
return $output;
[941] Fix | Delete
}
[942] Fix | Delete
[943] Fix | Delete
// Preserve only the top most level keys.
[944] Fix | Delete
$output = array_intersect_key( $input, array_flip( static::VALID_TOP_LEVEL_KEYS ) );
[945] Fix | Delete
[946] Fix | Delete
/*
[947] Fix | Delete
* Remove any rules that are annotated as "top" in VALID_STYLES constant.
[948] Fix | Delete
* Some styles are only meant to be available at the top-level (e.g.: blockGap),
[949] Fix | Delete
* hence, the schema for blocks & elements should not have them.
[950] Fix | Delete
*/
[951] Fix | Delete
$styles_non_top_level = static::VALID_STYLES;
[952] Fix | Delete
foreach ( array_keys( $styles_non_top_level ) as $section ) {
[953] Fix | Delete
// array_key_exists() needs to be used instead of isset() because the value can be null.
[954] Fix | Delete
if ( array_key_exists( $section, $styles_non_top_level ) && is_array( $styles_non_top_level[ $section ] ) ) {
[955] Fix | Delete
foreach ( array_keys( $styles_non_top_level[ $section ] ) as $prop ) {
[956] Fix | Delete
if ( 'top' === $styles_non_top_level[ $section ][ $prop ] ) {
[957] Fix | Delete
unset( $styles_non_top_level[ $section ][ $prop ] );
[958] Fix | Delete
}
[959] Fix | Delete
}
[960] Fix | Delete
}
[961] Fix | Delete
}
[962] Fix | Delete
[963] Fix | Delete
// Build the schema based on valid block & element names.
[964] Fix | Delete
$schema = array();
[965] Fix | Delete
$schema_styles_elements = array();
[966] Fix | Delete
[967] Fix | Delete
/*
[968] Fix | Delete
* Set allowed element pseudo selectors based on per element allow list.
[969] Fix | Delete
* Target data structure in schema:
[970] Fix | Delete
* e.g.
[971] Fix | Delete
* - top level elements: `$schema['styles']['elements']['link'][':hover']`.
[972] Fix | Delete
* - block level elements: `$schema['styles']['blocks']['core/button']['elements']['link'][':hover']`.
[973] Fix | Delete
*/
[974] Fix | Delete
foreach ( $valid_element_names as $element ) {
[975] Fix | Delete
$schema_styles_elements[ $element ] = $styles_non_top_level;
[976] Fix | Delete
[977] Fix | Delete
if ( isset( static::VALID_ELEMENT_PSEUDO_SELECTORS[ $element ] ) ) {
[978] Fix | Delete
foreach ( static::VALID_ELEMENT_PSEUDO_SELECTORS[ $element ] as $pseudo_selector ) {
[979] Fix | Delete
$schema_styles_elements[ $element ][ $pseudo_selector ] = $styles_non_top_level;
[980] Fix | Delete
}
[981] Fix | Delete
}
[982] Fix | Delete
}
[983] Fix | Delete
[984] Fix | Delete
$schema_styles_blocks = array();
[985] Fix | Delete
$schema_settings_blocks = array();
[986] Fix | Delete
[987] Fix | Delete
/*
[988] Fix | Delete
* Generate a schema for blocks.
[989] Fix | Delete
* - Block styles can contain `elements` & `variations` definitions.
[990] Fix | Delete
* - Variations definitions cannot be nested.
[991] Fix | Delete
* - Variations can contain styles for inner `blocks`.
[992] Fix | Delete
* - Variation inner `blocks` styles can contain `elements`.
[993] Fix | Delete
*
[994] Fix | Delete
* As each variation needs a `blocks` schema but further nested
[995] Fix | Delete
* inner `blocks`, the overall schema will be generated in multiple passes.
[996] Fix | Delete
*/
[997] Fix | Delete
foreach ( $valid_block_names as $block ) {
[998] Fix | Delete
$schema_settings_blocks[ $block ] = static::VALID_SETTINGS;
[999] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function