wp_apply_colors_support()WP 5.6.0

Adds CSS classes and inline styles for colors to the incoming attributes array. This will be applied to the block markup in the front-end.

Internal function — this function is designed to be used by the kernel itself. It is not recommended to use this function in your code.

No Hooks.

Returns

array. Colors CSS classes and inline styles.

Usage

wp_apply_colors_support( $block_type, $block_attributes );
$block_type(WP_Block_Type) (required)
Block type.
$block_attributes(array) (required)
Block attributes.

Changelog

Since 5.6.0 Introduced.
Since 6.1.0 Implemented the style engine to generate CSS and classnames.
Since 7.1.0 Suppresses color.gradient when background.gradient is supported and set.

wp_apply_colors_support() code WP 7.1

function wp_apply_colors_support( $block_type, $block_attributes ) {
	$color_support = $block_type->supports['color'] ?? false;

	if (
		is_array( $color_support ) &&
		wp_should_skip_block_supports_serialization( $block_type, 'color' )
	) {
		return array();
	}

	$has_text_colors_support       = true === $color_support ||
		( isset( $color_support['text'] ) && $color_support['text'] ) ||
		( is_array( $color_support ) && ! isset( $color_support['text'] ) );
	$has_background_colors_support = true === $color_support ||
		( isset( $color_support['background'] ) && $color_support['background'] ) ||
		( is_array( $color_support ) && ! isset( $color_support['background'] ) );
	$has_gradients_support         = $color_support['gradients'] ?? false;
	$color_block_styles            = array();

	// Text colors.
	if ( $has_text_colors_support && ! wp_should_skip_block_supports_serialization( $block_type, 'color', 'text' ) ) {
		$preset_text_color          = array_key_exists( 'textColor', $block_attributes ) ? "var:preset|color|{$block_attributes['textColor']}" : null;
		$custom_text_color          = $block_attributes['style']['color']['text'] ?? null;
		$color_block_styles['text'] = $preset_text_color ? $preset_text_color : $custom_text_color;
	}

	// Background colors.
	if ( $has_background_colors_support && ! wp_should_skip_block_supports_serialization( $block_type, 'color', 'background' ) ) {
		$preset_background_color          = array_key_exists( 'backgroundColor', $block_attributes ) ? "var:preset|color|{$block_attributes['backgroundColor']}" : null;
		$custom_background_color          = $block_attributes['style']['color']['background'] ?? null;
		$color_block_styles['background'] = $preset_background_color ? $preset_background_color : $custom_background_color;
	}

	// Gradients.
	// Suppress color.gradient CSS when background.gradient is supported and
	// explicitly set. background.php owns CSS generation in that case, and
	// emitting the background shorthand here would conflict with it.
	$has_background_gradient_support = block_has_support( $block_type, array( 'background', 'gradient' ), false );
	$has_background_gradient_value   = ! empty( $block_attributes['style']['background']['gradient'] );

	if (
		$has_gradients_support &&
		! wp_should_skip_block_supports_serialization( $block_type, 'color', 'gradients' ) &&
		! ( $has_background_gradient_support && $has_background_gradient_value )
	) {
		$preset_gradient_color          = array_key_exists( 'gradient', $block_attributes ) ? "var:preset|gradient|{$block_attributes['gradient']}" : null;
		$custom_gradient_color          = $block_attributes['style']['color']['gradient'] ?? null;
		$color_block_styles['gradient'] = $preset_gradient_color ? $preset_gradient_color : $custom_gradient_color;
	}

	$attributes = array();
	$styles     = wp_style_engine_get_styles( array( 'color' => $color_block_styles ), array( 'convert_vars_to_classnames' => true ) );

	if ( ! empty( $styles['classnames'] ) ) {
		$attributes['class'] = $styles['classnames'];
	}

	if ( ! empty( $styles['css'] ) ) {
		$attributes['style'] = $styles['css'];
	}

	return $attributes;
}