WP_Theme_JSON_Resolver::get_user_data_from_wp_global_styles()public staticWP 5.9.0

Returns the custom post type that contains the user's origin config for the active theme or an empty array if none are found.

This can also create and return a new draft custom post type.

Method of the class: WP_Theme_JSON_Resolver{}

No Hooks.

Return

Array. Custom Post Type for the user's origin config.

Usage

$result = WP_Theme_JSON_Resolver::get_user_data_from_wp_global_styles( $theme, $create_post, $post_status_filter );
$theme(WP_Theme) (required)
The theme object. If empty, it defaults to the active theme.
$create_post(true|false)
Whether a new custom post type should be created if none are found.
Default: false
$post_status_filter(array)
Filter custom post type by post status.
Default: array( 'publish' ), so it only fetches published posts

Changelog

Since 5.9.0 Introduced.

WP_Theme_JSON_Resolver::get_user_data_from_wp_global_styles() code WP 6.5.2

public static function get_user_data_from_wp_global_styles( $theme, $create_post = false, $post_status_filter = array( 'publish' ) ) {
	if ( ! $theme instanceof WP_Theme ) {
		$theme = wp_get_theme();
	}

	/*
	 * Bail early if the theme does not support a theme.json.
	 *
	 * Since wp_theme_has_theme_json() only supports the active
	 * theme, the extra condition for whether $theme is the active theme is
	 * present here.
	 */
	if ( $theme->get_stylesheet() === get_stylesheet() && ! wp_theme_has_theme_json() ) {
		return array();
	}

	$user_cpt         = array();
	$post_type_filter = 'wp_global_styles';
	$stylesheet       = $theme->get_stylesheet();
	$args             = array(
		'posts_per_page'         => 1,
		'orderby'                => 'date',
		'order'                  => 'desc',
		'post_type'              => $post_type_filter,
		'post_status'            => $post_status_filter,
		'ignore_sticky_posts'    => true,
		'no_found_rows'          => true,
		'update_post_meta_cache' => false,
		'update_post_term_cache' => false,
		'tax_query'              => array(
			array(
				'taxonomy' => 'wp_theme',
				'field'    => 'name',
				'terms'    => $stylesheet,
			),
		),
	);

	$global_style_query = new WP_Query();
	$recent_posts       = $global_style_query->query( $args );
	if ( count( $recent_posts ) === 1 ) {
		$user_cpt = get_object_vars( $recent_posts[0] );
	} elseif ( $create_post ) {
		$cpt_post_id = wp_insert_post(
			array(
				'post_content' => '{"version": ' . WP_Theme_JSON::LATEST_SCHEMA . ', "isGlobalStylesUserThemeJSON": true }',
				'post_status'  => 'publish',
				'post_title'   => 'Custom Styles', // Do not make string translatable, see https://core.trac.wordpress.org/ticket/54518.
				'post_type'    => $post_type_filter,
				'post_name'    => sprintf( 'wp-global-styles-%s', urlencode( $stylesheet ) ),
				'tax_input'    => array(
					'wp_theme' => array( $stylesheet ),
				),
			),
			true
		);
		if ( ! is_wp_error( $cpt_post_id ) ) {
			$user_cpt = get_object_vars( get_post( $cpt_post_id ) );
		}
	}

	return $user_cpt;
}