PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 14.0.1
Jetpack – WP Security, Backup, Speed, & Growth v14.0.1
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 13.7.2 13.8.3 13.9.2 14.0.1 14.1.1 14.2.2 14.3.1 14.4.2 14.5.1 14.6.1 14.7.1 14.8.1 14.9.2 15.0.3 15.1.2 15.2.1 15.3.2 15.4.1 15.5.1 15.6.1 15.7.2 15.8.1 15.9.2 16.0.2 16.1.3 16.2-a.5 16.2-a.3 16.1.2 16.2-a.1 16.1.1 16.1 16.1-beta 16.1-beta.2 16.1-beta.3 16.1-a.5 16.1-a.3 16.0.1 16.1-a.1 16.0 16.0-beta 16.0-a.7 16.0-a.5 15.9.1 16.0-a.3 16.0-a.1 15.9 15.9-beta 15.9-a.7 15.9-a.5 15.9-a.3 15.9-a.1 15.8 15.8-beta 15.8-a.7 15.8-a.5 5.2.5 5.3.4 5.4.4 5.5.5 5.6.5 5.7.5 5.8.4 5.9.4 6.0.4 6.1 6.1.1 6.1.2 6.1.3 6.1.4 6.1.5 6.2 6.2.1 6.2.2 6.2.3 6.2.4 6.2.5 6.3 6.3.1 6.3.2 6.3.3 6.3.4 6.3.5 6.3.6 6.3.7 6.4 6.4.1 6.4.2 6.4.3 6.4.4 6.4.5 6.4.6 6.5 6.5.1 6.5.2 6.5.3 6.5.4 6.6 6.6.1 6.6.2 6.6.3 6.6.4 6.6.5 6.7 6.7.1 6.7.2 6.7.3 6.7.4 6.8 6.8.1 6.8.2 6.8.3 6.8.4 6.8.5 6.9 6.9.1 6.9.2 6.9.3 6.9.4 7.0 7.0.1 7.0.2 7.0.3 7.0.4 7.0.5 7.1 7.1.1 7.1.2 7.1.3 7.1.4 7.1.5 7.2 7.2.1 7.2.1.1 7.2.2 7.2.3 7.2.4 7.2.5 7.3 7.3.0.1 7.3.1 7.3.1.1 7.3.2 7.3.3 7.3.4 7.3.5 7.4 7.4.1 7.4.2 7.4.3 7.4.4 7.4.5 7.5 7.5.0.1 7.5.1 7.5.2 7.5.3 7.5.4 7.5.5 7.5.6 7.5.7 7.6 7.6.1 7.6.2 7.6.3 7.6.4 7.7 7.7.1 7.7.2 7.7.3 7.7.4 7.7.5 7.7.6 7.8 7.8.1 7.8.2 7.8.3 7.8.4 7.9 7.9.1 7.9.2 7.9.3 7.9.4 8.0 8.0.1 8.0.2 8.0.3 8.1 8.1.1 8.1.2 8.1.3 8.1.4 8.2 8.2.0.1 8.2.1 8.2.2 8.2.3 8.2.4 8.2.5 8.2.6 8.3 8.3.1 8.3.2 8.3.3 8.4 8.4.1 8.4.2 8.4.3 8.4.4 8.4.5 8.5 8.5.1 8.5.2 8.5.3 8.6 8.6.1 8.6.2 8.6.3 8.6.4 8.7 8.7.0.1 8.7.1 8.7.2 8.7.3 8.7.4 8.8 8.8.1 8.8.2 8.8.3 8.8.4 8.8.5 8.9 8.9.1 8.9.2 8.9.3 8.9.4 9.0 9.0.1 9.0.2 9.0.3 9.0.4 9.0.5 9.1 9.1.1 9.1.2 9.1.3 9.2 9.2.1 9.2.2 9.2.3 9.2.4 9.3 9.3.1 9.3.2 9.3.3 9.3.4 9.3.5 9.4 9.4.1 9.4.2 9.4.3 9.4.4 9.5 9.5.1 9.5.2 9.5.3 9.5.4 9.5.5 9.6 9.6.1 9.6.2 9.6.3 9.6.4 9.7 9.7.1 9.7.2 15.7-beta.2 9.7.3 15.7.1 9.8 15.8-a.1 9.8.1 15.8-a.3 9.8.2 2.0.9 9.8.3 2.1.7 9.9 2.2.10 9.9.1 2.3.10 9.9.2 2.4.7 9.9.3 2.5.5 2.6.6 2.7.5 2.8.5 2.9.6 3.0.6 3.1.5 3.2.5 3.3.6 3.4.6 3.5.6 3.6.4 3.7.5 3.8.5 3.9.10 4.0.7 4.1.4 4.2.5 4.3.5 4.4.5 4.5.3 4.6.3 4.7.4 4.8.5 4.9.3 5.0.3 5.1.4 trunk 10.0 10.0.1 10.0.2 10.1 10.1.1 10.1.2 10.2 10.2.1 10.2.2 10.2.3 10.3 10.3.1 10.3.2 10.4 10.4.1 10.4.2 10.5 10.5.1 10.5.2 10.5.3 10.6 10.6.1 10.6.2 10.7 10.7.1 10.7.2 10.8 10.8.1 10.8.2 10.9 10.9.1 10.9.2 10.9.3 11.0 11.0.1 11.0.2 11.1 11.1.1 11.1.2 11.1.3 11.1.4 11.2 11.2.1 11.2.2 11.3 11.3.1 11.3.2 11.3.3 11.3.4 11.4 11.4.1 11.4.2 11.5 11.5.1 11.5.2 11.5.3 11.6 11.6.1 11.6.2 11.7 11.7.1 11.7.2 11.7.3 11.8 11.8.3 11.8.4 11.8.5 11.8.6 11.9 11.9.1 11.9.2 11.9.3 12.0 12.0.1 12.0.2 12.1 12.1.1 12.1.2 12.2 12.2.1 12.2.2 12.3 12.3.1 12.4 12.4.1 12.5 12.5.1 12.6 12.6.1 12.6.2 12.6.3 12.7 12.7.1 12.7.2 12.8 12.8.1 12.8.2 12.9 12.9.1 12.9.2 12.9.3 12.9.4 13.0 13.0.1 13.1 13.1.1 13.1.2 13.1.3 13.1.4 13.2 13.2.1 13.2.2 13.2.3 13.3 13.3.1 13.3.2 13.4 13.4.1 13.4.2 13.4.3 13.4.4 13.5 13.5.1 13.6 13.6.1 13.7 13.7.1 13.8 13.8.1 13.8.2 13.9 13.9.1 14.0 14.1 14.2 14.2.1 14.3 14.4 14.4.1 14.5 14.6 14.7 14.8 14.9 14.9.1 15.0 15.0.1 15.0.2 15.1 15.1.1 15.2 15.3 15.3.1 15.4 15.5 15.6 15.7 15.7-a.1 15.7-a.3 15.7-a.5 15.7-a.7 15.7-beta
jetpack / modules / google-fonts / current / load-google-fonts.php
jetpack / modules / google-fonts / current Last commit date
class-jetpack-google-font-face.php 2 years ago load-google-fonts.php 2 years ago
load-google-fonts.php
217 lines
1 <?php
2 /**
3 * Load the google fonts by the new Font Library. See pNEWy-hhx-p2.
4 *
5 * @package automattic/jetpack
6 */
7
8 if ( ! class_exists( 'Jetpack_Google_Font_Face' ) ) {
9 /**
10 * Load Jetpack Google Font Face
11 */
12 require_once __DIR__ . '/class-jetpack-google-font-face.php';
13 }
14
15 /**
16 * Gets the Google Fonts data
17 *
18 * @return object[] The collection data of the Google Fonts.
19 */
20 function jetpack_get_google_fonts_data() {
21 /**
22 * Filters the Google Fonts data before the default retrieval process.
23 *
24 * This filter allows short-circuiting the default Google Fonts data retrieval process.
25 * Returning a non-null value from this filter will bypass the default retrieval
26 * and return the filtered value instead.
27 *
28 * @module google-fonts
29 *
30 * @since 13.7
31 *
32 * @param null|array $pre The pre-filtered Google Fonts data, default null.
33 */
34 $pre = apply_filters( 'pre_jetpack_get_google_fonts_data', null );
35 if ( null !== $pre ) {
36 return $pre;
37 }
38
39 $default_google_fonts_api_url = 'https://fonts.gstatic.com';
40 $jetpack_google_fonts_collection_url = 'https://s0.wp.com/i/font-collections/jetpack-google-fonts.json';
41 $cache_key = 'jetpack_google_fonts_' . md5( $jetpack_google_fonts_collection_url );
42 $data = get_transient( $cache_key );
43 if ( $data === false ) {
44 $response = wp_remote_get( $jetpack_google_fonts_collection_url );
45 if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) !== 200 ) {
46 return null;
47 }
48
49 $data = json_decode( wp_remote_retrieve_body( $response ), true );
50 if ( $data === null ) {
51 return null;
52 }
53
54 set_transient( $cache_key, $data, DAY_IN_SECONDS );
55 }
56
57 // Replace the google fonts api url if the custom one is provided.
58 $custom_google_fonts_api_url = \esc_url(
59 /**
60 * Filters the Google Fonts API URL.
61 *
62 * @module google-fonts
63 *
64 * @since 12.8
65 *
66 * @param string $url The Google Fonts API URL.
67 */
68 apply_filters( 'jetpack_google_fonts_api_url', $default_google_fonts_api_url )
69 );
70 if ( $custom_google_fonts_api_url !== $default_google_fonts_api_url ) {
71 foreach ( $data['fontFamilies'] as &$font_family ) {
72 foreach ( $font_family['fontFace'] as &$font_face ) {
73 $font_face['src'] = str_replace(
74 $default_google_fonts_api_url,
75 $custom_google_fonts_api_url,
76 $font_face['src']
77 );
78 }
79 }
80 }
81
82 if ( is_array( $data ) && is_array( $data['fontFamilies'] ) ) {
83 return $data;
84 }
85 }
86
87 /**
88 * Gets the map of the available Google Fonts
89 *
90 * @param object[] $google_fonts_data The collection data of the Google Fonts.
91 * @return object[] The map of the the available Google Fonts.
92 */
93 function jetpack_get_available_google_fonts_map( $google_fonts_data ) {
94 $jetpack_google_fonts_list = array_map(
95 function ( $font_family ) {
96 return $font_family['name'];
97 },
98 $google_fonts_data['fontFamilies']
99 );
100
101 /**
102 * Curated list of Google Fonts.
103 *
104 * @module google-fonts
105 *
106 * @since 10.8
107 *
108 * @param array $fonts_to_register Array of Google Font names to register.
109 */
110 $google_font_list = apply_filters( 'jetpack_google_fonts_list', $jetpack_google_fonts_list );
111 $available_google_fonts_map = array();
112
113 foreach ( $google_font_list as $google_font ) {
114 $available_google_fonts_map[ $google_font ] = true;
115 }
116
117 return $available_google_fonts_map;
118 }
119
120 /**
121 * Register google fonts to the theme json data
122 *
123 * @param WP_Theme_JSON_Data $theme_json The theme json data of core.
124 * @return WP_Theme_JSON_Data The theme json data with registered google fonts.
125 */
126 function jetpack_register_google_fonts_to_theme_json( $theme_json ) {
127 $google_fonts_data = jetpack_get_google_fonts_data();
128 if ( ! $google_fonts_data ) {
129 return $theme_json;
130 }
131
132 $available_google_fonts_map = jetpack_get_available_google_fonts_map( $google_fonts_data );
133 $google_fonts_families = array_values(
134 array_filter(
135 $google_fonts_data['fontFamilies'],
136 function ( $google_fonts_family ) use ( $available_google_fonts_map ) {
137 $name = $google_fonts_family['name'];
138 return $available_google_fonts_map[ $name ] ?? false;
139 }
140 )
141 );
142
143 $raw_data = $theme_json->get_data();
144 $origin = 'default';
145 if ( empty( $raw_data['settings']['typography']['fontFamilies'][ $origin ] ) ) {
146 $raw_data['settings']['typography']['fontFamilies'][ $origin ] = array();
147 }
148
149 foreach ( $google_fonts_families as $font_family ) {
150 $raw_data['settings']['typography']['fontFamilies'][ $origin ][] = $font_family;
151 }
152
153 $theme_json_class = get_class( $theme_json );
154 return new $theme_json_class( $raw_data, $origin );
155 }
156
157 add_filter( 'wp_theme_json_data_default', 'jetpack_register_google_fonts_to_theme_json' );
158
159 /**
160 * Filter out the deprecated font families that are from the jetpack-google-fonts provider.
161 *
162 * @param object[] $font_families The font families.
163 * @return object[] The filtered font families.
164 */
165 function jetpack_google_fonts_filter_out_deprecated_font_data( $font_families ) {
166 return array_values(
167 array_filter(
168 $font_families,
169 function ( $font_family ) {
170 $has_deprecated_google_fonts_data = false;
171
172 if ( isset( $font_family['fontFace'] ) ) {
173 foreach ( $font_family['fontFace'] as $font_face ) {
174 $provider = $font_face['provider'] ?? '';
175 if ( $provider === 'jetpack-google-fonts' ) {
176 $has_deprecated_google_fonts_data = true;
177 break;
178 }
179 }
180 }
181
182 return ! $has_deprecated_google_fonts_data;
183 }
184 )
185 );
186 }
187
188 /**
189 * Unregister the deprecated jetpack-google-fonts provider from theme json data that were stored
190 * before we moved to the Font Library.
191 *
192 * @param WP_Theme_JSON_Data $theme_json The theme json data.
193 * @return WP_Theme_JSON_Data The filtered theme json data.
194 */
195 function jetpack_unregister_deprecated_google_fonts_from_theme_json_data( $theme_json ) {
196 $raw_data = $theme_json->get_data();
197 $origin = 'theme';
198 if ( empty( $raw_data['settings']['typography']['fontFamilies'][ $origin ] ) ) {
199 return $theme_json;
200 }
201
202 // Filter out the font definitions that are from the jetpack-google-fonts provider.
203 $raw_data['settings']['typography']['fontFamilies'][ $origin ] = jetpack_google_fonts_filter_out_deprecated_font_data(
204 $raw_data['settings']['typography']['fontFamilies'][ $origin ]
205 );
206
207 $theme_json_class = get_class( $theme_json );
208 return new $theme_json_class( $raw_data, 'custom' );
209 }
210
211 add_filter( 'wp_theme_json_data_theme', 'jetpack_unregister_deprecated_google_fonts_from_theme_json_data' );
212 add_filter( 'wp_theme_json_data_user', 'jetpack_unregister_deprecated_google_fonts_from_theme_json_data' );
213
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
216 new Jetpack_Google_Font_Face();
217