W3cubDocs

/WordPress

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

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

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

© 2003–2024 WordPress Foundation
Licensed under the GNU GPLv2+ License.
https://developer.wordpress.org/reference/classes/wp_rest_global_styles_controller/prepare_item_for_database