WP_Theme_JSON::sanitize_viewport_settingsprivate staticWP 7.1.0

Sanitizes and normalizes viewport breakpoint settings.

Keeps only supported breakpoint keys, trims valid CSS lengths, and returns the default breakpoints when no valid custom breakpoint is provided. When only one breakpoint is valid, it remains keyed by its configured state and uses a single max-width media query. When tablet is not larger than mobile, it is removed.

Method of the class: WP_Theme_JSON{}

No Hooks.

Returns

Array. Sanitized viewport breakpoint settings.

Usage

$result = WP_Theme_JSON::sanitize_viewport_settings( $viewport_settings );
$viewport_settings(mixed) (required)
Viewport settings from theme.json.

Changelog

Since 7.1.0 Introduced.

WP_Theme_JSON::sanitize_viewport_settings() code WP 7.1

private static function sanitize_viewport_settings( $viewport_settings ) {
	if ( ! is_array( $viewport_settings ) ) {
		return static::DEFAULT_VIEWPORT_BREAKPOINTS;
	}

	$breakpoints = array();
	foreach ( array_keys( static::DEFAULT_VIEWPORT_BREAKPOINTS ) as $breakpoint ) {
		$value = $viewport_settings[ $breakpoint ] ?? null;
		$px    = static::get_viewport_breakpoint_value_in_pixels( $value );
		if ( null !== $px ) {
			$breakpoints[ $breakpoint ] = array(
				'value' => trim( $value ),
				'px'    => $px,
			);
		}
	}

	if ( empty( $breakpoints ) ) {
		return static::DEFAULT_VIEWPORT_BREAKPOINTS;
	}

	if ( 1 === count( $breakpoints ) ) {
		$breakpoint = key( $breakpoints );
		return array( $breakpoint => $breakpoints[ $breakpoint ]['value'] );
	}

	$sanitized = array( 'mobile' => $breakpoints['mobile']['value'] );

	if ( isset( $breakpoints['tablet'] ) && $breakpoints['mobile']['px'] < $breakpoints['tablet']['px'] ) {
		$sanitized['tablet'] = $breakpoints['tablet']['value'];
	}

	return $sanitized;
}