WP_Interactivity_API::merge_style_property()privateWP 6.5.0

Merges an individual style property in the style attribute of an HTML element, updating or removing the property when necessary.

If a property is modified, the old one is removed and the new one is added at the end of the list.

Example:

merge_style_property( 'color:green;', 'color', 'red' )      => 'color:red;'
merge_style_property( 'background:green;', 'color', 'red' ) => 'background:green;color:red;'
merge_style_property( 'color:green;', 'color', null )       => ''

Method of the class: WP_Interactivity_API{}

No Hooks.

Return

String. The new style attribute value after the specified property has been added, updated or removed.

Usage

// private - for code of main (parent) class only
$result = $this->merge_style_property( $style_attribute_value, $style_property_name, $style_property_value ): string;
$style_attribute_value(string) (required)
The current style attribute value.
$style_property_name(string) (required)
The style property name to set.
$style_property_value(string|false|null) (required)
The value to set for the style property. With false, null or an empty string, it removes the style property.

Changelog

Since 6.5.0 Introduced.

WP_Interactivity_API::merge_style_property() code WP 6.5.4

private function merge_style_property( string $style_attribute_value, string $style_property_name, $style_property_value ): string {
	$style_assignments    = explode( ';', $style_attribute_value );
	$result               = array();
	$style_property_value = ! empty( $style_property_value ) ? rtrim( trim( $style_property_value ), ';' ) : null;
	$new_style_property   = $style_property_value ? $style_property_name . ':' . $style_property_value . ';' : '';

	// Generates an array with all the properties but the modified one.
	foreach ( $style_assignments as $style_assignment ) {
		if ( empty( trim( $style_assignment ) ) ) {
			continue;
		}
		list( $name, $value ) = explode( ':', $style_assignment );
		if ( trim( $name ) !== $style_property_name ) {
			$result[] = trim( $name ) . ':' . trim( $value ) . ';';
		}
	}

	// Adds the new/modified property at the end of the list.
	$result[] = $new_style_property;

	return implode( '', $result );
}