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.

Метод класса: WP_Theme_JSON_Resolver{}

Хуков нет.

Возвращает

Массив. Custom Post Type for the user's origin config.

Использование

$result = WP_Theme_JSON_Resolver::get_user_data_from_wp_global_styles( $theme, $create_post, $post_status_filter );
$theme(WP_Theme) (обязательный)
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.
По умолчанию: false
$post_status_filter(массив)
Filter custom post type by post status.
По умолчанию: array( 'publish' ), so it only fetches published posts

Список изменений

С версии 5.9.0 Введена.

Код WP_Theme_JSON_Resolver::get_user_data_from_wp_global_styles() 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;
}