WP_REST_Global_Styles_Controller::prepare_item_for_database( WP_REST_Request $request ): stdClass|WP_Error

In this article

Prepares a single global styles config for update.

Parameters

$requestWP_REST_Requestrequired
Request object.

Return

stdClass|WP_Error Prepared item on success. WP_Error on when the custom CSS is not valid.

Source

protected function prepare_item_for_database( $request ) {
	$changes     = new stdClass();
	$changes->ID = $request['id'];

	$post            = get_post( $request['id'] );
	$existing_config = array();
	if ( $post ) {
		$existing_config     = json_decode( $post->post_content, true );
		$json_decoding_error = json_last_error();
		if ( JSON_ERROR_NONE !== $json_decoding_error || ! isset( $existing_config['isGlobalStylesUserThemeJSON'] ) ||
			! $existing_config['isGlobalStylesUserThemeJSON'] ) {
			$existing_config = array();
		}
	}

	if ( isset( $request['styles'] ) || isset( $request['settings'] ) ) {
		$config = array();
		if ( isset( $request['styles'] ) ) {
			if ( isset( $request['styles']['css'] ) ) {
				$css_validation_result = $this->validate_custom_css( $request['styles']['css'] );
				if ( is_wp_error( $css_validation_result ) ) {
					return $css_validation_result;
				}
			}
			$config['styles'] = $request['styles'];
		} elseif ( isset( $existing_config['styles'] ) ) {
			$config['styles'] = $existing_config['styles'];
		}

		// Register theme-defined variations e.g. from block style variation partials under `/styles`.
		$variations = WP_Theme_JSON_Resolver::get_style_variations( 'block' );
		wp_register_block_style_variations_from_theme_json_partials( $variations );

		if ( isset( $request['settings'] ) ) {
			$config['settings'] = $request['settings'];
		} elseif ( isset( $existing_config['settings'] ) ) {
			$config['settings'] = $existing_config['settings'];
		}
		$config['isGlobalStylesUserThemeJSON'] = true;
		$config['version']                     = WP_Theme_JSON::LATEST_SCHEMA;
		$changes->post_content                 = wp_json_encode( $config );
	}

	// Post title.
	if ( isset( $request['title'] ) ) {
		if ( is_string( $request['title'] ) ) {
			$changes->post_title = $request['title'];
		} elseif ( ! empty( $request['title']['raw'] ) ) {
			$changes->post_title = $request['title']['raw'];
		}
	}

	return $changes;
}

Changelog

VersionDescription
6.6.0Added registration of block style variations from theme.json sources (theme.json, user theme.json, partials).
6.2.0Added validation of styles.css property.
5.9.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.