PluginProbe
Jetpack – WP Security, Backup, Speed, & Growth / 16.3-beta
Jetpack – WP Security, Backup, Speed, & Growth v16.3-beta
16.3 16.3-beta 16.3-a.5 16.3-a.7 16.3-a.3 16.3-a.1 16.2 16.2-beta 12.0.3 12.1.3 12.2.3 12.3.2 12.4.2 12.5.2 12.6.4 12.7.3 12.8.3 12.9.5 13.0.2 13.1.5 13.2.4 13.3.3 13.4.5 13.5.2 13.6.2 All 508 releases
← All changes | modules/google-fonts/current/load-google-fonts.php +91 -7 13.7.2 → 16.3-beta View file →
@@ -4,8 +4,12 @@
4 4 *
5 5 * @package automattic/jetpack
6 6 */
7 7
8 +if ( ! defined( 'ABSPATH' ) ) {
9 + exit( 0 );
10 +}
11 +
8 12 if ( ! class_exists( 'Jetpack_Google_Font_Face' ) ) {
9 13 /**
10 14 * Load Jetpack Google Font Face
11 15 */
@@ -14,9 +18,9 @@
14 18
15 19 /**
16 20 * Gets the Google Fonts data
17 21 *
18 - * @return object[] The collection data of the Google Fonts.
22 + * @return array|null The collection data of the Google Fonts.
19 23 */
20 24 function jetpack_get_google_fonts_data() {
21 25 /**
22 26 * Filters the Google Fonts data before the default retrieval process.
@@ -86,10 +90,10 @@
86 90
87 91 /**
88 92 * Gets the map of the available Google Fonts
89 93 *
90 - * @param object[] $google_fonts_data The collection data of the Google Fonts.
91 - * @return object[] The map of the the available Google Fonts.
94 + * @param array $google_fonts_data The collection data of the Google Fonts.
95 + * @return array The map of the the available Google Fonts.
92 96 */
93 97 function jetpack_get_available_google_fonts_map( $google_fonts_data ) {
94 98 $jetpack_google_fonts_list = array_map(
95 99 function ( $font_family ) {
@@ -117,8 +121,53 @@
117 121 return $available_google_fonts_map;
118 122 }
119 123
120 124 /**
125 + * Whether the request URL is a REST route.
126 + *
127 + * Theme JSON can resolve before REST_REQUEST is defined, and the Accept header also matches front-end requests.
128 + *
129 + * @since 16.3
130 + *
131 + * @return bool
132 + */
133 +function jetpack_google_fonts_is_rest_url() {
134 + // phpcs:ignore WordPress.Security.NonceVerification.Recommended -- Only used to classify the request.
135 + if ( isset( $_GET['rest_route'] ) ) {
136 + return true;
137 + }
138 + $path = (string) wp_parse_url( isset( $_SERVER['REQUEST_URI'] ) ? wp_unslash( $_SERVER['REQUEST_URI'] ) : '', PHP_URL_PATH ); // phpcs:ignore WordPress.Security.ValidatedSanitizedInput.InputNotSanitized -- Parsed for path comparison only.
139 + return str_contains( $path, '/' . rest_get_url_prefix() . '/' );
140 +}
141 +
142 +/**
143 + * Whether catalogue faces are needed in theme JSON for an editor or API request.
144 + *
145 + * @since 16.3
146 + *
147 + * @return bool
148 + */
149 +function jetpack_google_fonts_load_font_faces() {
150 + $load_font_faces = is_admin()
151 + || ( defined( 'REST_REQUEST' ) && REST_REQUEST )
152 + || jetpack_google_fonts_is_rest_url()
153 + || ( defined( 'WP_CLI' ) && WP_CLI );
154 +
155 + /**
156 + * Filters whether catalogue font faces are loaded into theme JSON.
157 + *
158 + * When true, the catalogue's files reach theme JSON and the native font printer prints all of them.
159 + *
160 + * @module google-fonts
161 + *
162 + * @since 16.3
163 + *
164 + * @param bool $load_font_faces Whether to load catalogue font faces. Default true for editor, API and CLI requests.
165 + */
166 + return (bool) apply_filters( 'jetpack_google_fonts_load_font_faces', $load_font_faces );
167 +}
168 +
169 +/**
121 170 * Register google fonts to the theme json data
122 171 *
123 172 * @param WP_Theme_JSON_Data $theme_json The theme json data of core.
124 173 * @return WP_Theme_JSON_Data The theme json data with registered google fonts.
@@ -145,9 +194,13 @@
145 194 if ( empty( $raw_data['settings']['typography']['fontFamilies'][ $origin ] ) ) {
146 195 $raw_data['settings']['typography']['fontFamilies'][ $origin ] = array();
147 196 }
148 197
198 + $load_font_faces = jetpack_google_fonts_load_font_faces();
149 199 foreach ( $google_fonts_families as $font_family ) {
200 + if ( ! $load_font_faces ) {
201 + unset( $font_family['fontFace'] );
202 + }
150 203 $raw_data['settings']['typography']['fontFamilies'][ $origin ][] = $font_family;
151 204 }
152 205
153 206 $theme_json_class = get_class( $theme_json );
@@ -158,10 +211,10 @@
158 211
159 212 /**
160 213 * Filter out the deprecated font families that are from the jetpack-google-fonts provider.
161 214 *
162 - * @param object[] $font_families The font families.
163 - * @return object[] The filtered font families.
215 + * @param array[] $font_families The font families.
216 + * @return array[] The filtered font families.
164 217 */
165 218 function jetpack_google_fonts_filter_out_deprecated_font_data( $font_families ) {
166 219 return array_values(
167 220 array_filter(
@@ -210,7 +263,38 @@
210 263
211 264 add_filter( 'wp_theme_json_data_theme', 'jetpack_unregister_deprecated_google_fonts_from_theme_json_data' );
212 265 add_filter( 'wp_theme_json_data_user', 'jetpack_unregister_deprecated_google_fonts_from_theme_json_data' );
213 266
214 -// Initialize Jetpack Google Font Face to avoid printing **ALL** google fonts provided by this module.
215 -// See p1700040028362329-slack-C4GAQ900P and p7DVsv-jib-p2
267 +/**
268 + * Clean up the Google Fonts data if either google fonts module is disabled or Jetpack is disabled.
269 + */
270 +function jetpack_unregister_google_fonts() {
271 + $post_id = WP_Theme_JSON_Resolver::get_user_global_styles_post_id();
272 +
273 + // Get user config
274 + $user_config = WP_Theme_JSON_Resolver::get_user_data();
275 + $user_config_raw_data = $user_config->get_raw_data();
276 + $user_config_raw_data['isGlobalStylesUserThemeJSON'] = true;
277 +
278 + // Prepare data for saving
279 + if ( ! empty( $user_config_raw_data['settings']['typography']['fontFamilies']['default'] ) ) {
280 + $user_config_raw_data['settings']['typography']['fontFamilies']['default'] = array();
281 + }
282 +
283 + if ( ! empty( $user_config_raw_data['settings']['typography']['fontFamilies']['theme'] ) ) {
284 + $user_config_raw_data['settings']['typography']['fontFamilies']['theme'] = jetpack_google_fonts_filter_out_deprecated_font_data(
285 + $user_config_raw_data['settings']['typography']['fontFamilies']['theme'] // @phan-suppress-current-line PhanTypeInvalidDimOffset, PhanTypeMismatchArgument
286 + );
287 + }
288 +
289 + // Prepare changes
290 + $changes = new stdClass();
291 + $changes->ID = $post_id;
292 + $changes->post_content = wp_json_encode( $user_config_raw_data, JSON_UNESCAPED_SLASHES );
293 +
294 + // Update user config
295 + wp_update_post( wp_slash( (array) $changes ), true );
296 +}
297 +add_action( 'jetpack_deactivate_module_google-fonts', 'jetpack_unregister_google_fonts' );
298 +
299 +// Print legacy catalogue faces separately from native theme and user fonts.
216 300 new Jetpack_Google_Font_Face();