PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 13.3.3
Jetpack – WP Security, Backup, Speed, & Growth v13.3.3
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 $default_google_fonts_api_url = 'https://fonts.gstatic.com';
22 $jetpack_google_fonts_collection_url = 'https://s0.wp.com/i/font-collections/jetpack-google-fonts.json';
23 $cache_key = 'jetpack_google_fonts_' . md5( $jetpack_google_fonts_collection_url );
24 $data = get_transient( $cache_key );
25 if ( $data === false ) {
26 $response = wp_remote_get( $jetpack_google_fonts_collection_url );
27 if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) !== 200 ) {
28 return null;
29 }
30
31 $data = json_decode( wp_remote_retrieve_body( $response ), true );
32 if ( $data === null ) {
33 return null;
34 }
35
36 set_transient( $cache_key, $data, DAY_IN_SECONDS );
37 }
38
39 // Replace the google fonts api url if the custom one is provided.
40 $custom_google_fonts_api_url = \esc_url(
41 /** This filter is documented in projects/packages/google-fonts-provider/src/class-google-fonts-provider.php */
42 apply_filters( 'jetpack_google_fonts_api_url', $default_google_fonts_api_url )
43 );
44 if ( $custom_google_fonts_api_url !== $default_google_fonts_api_url ) {
45 foreach ( $data['fontFamilies'] as &$font_family ) {
46 foreach ( $font_family['fontFace'] as &$font_face ) {
47 $font_face['src'] = str_replace(
48 $default_google_fonts_api_url,
49 $custom_google_fonts_api_url,
50 $font_face['src']
51 );
52 }
53 }
54 }
55
56 if ( is_array( $data ) && is_array( $data['fontFamilies'] ) ) {
57 return $data;
58 }
59 }
60
61 /**
62 * Gets the map of the available Google Fonts
63 *
64 * @param object[] $google_fonts_data The collection data of the Google Fonts.
65 * @return object[] The map of the the available Google Fonts.
66 */
67 function jetpack_get_available_google_fonts_map( $google_fonts_data ) {
68 $jetpack_google_fonts_list = array_map(
69 function ( $font_family ) {
70 return $font_family['name'];
71 },
72 $google_fonts_data['fontFamilies']
73 );
74
75 /** This filter is documented in modules/google-fonts/wordpress-6.3/load-google-fonts.php */
76 $google_font_list = apply_filters( 'jetpack_google_fonts_list', $jetpack_google_fonts_list );
77 $available_google_fonts_map = array();
78
79 foreach ( $google_font_list as $google_font ) {
80 $available_google_fonts_map[ $google_font ] = true;
81 }
82
83 return $available_google_fonts_map;
84 }
85
86 /**
87 * Gets the font families of the active theme
88 *
89 * @return object[] The font families of the active theme.
90 */
91 function jetpack_get_theme_fonts_map() {
92 if ( ! class_exists( 'WP_Theme_JSON_Resolver' ) ) {
93 return array();
94 }
95
96 $theme_json = WP_Theme_JSON_Resolver::get_theme_data();
97 $raw_data = $theme_json->get_data();
98 if ( empty( $raw_data['settings']['typography']['fontFamilies'] ) ) {
99 return array();
100 }
101
102 $theme_fonts_map = array();
103 foreach ( $raw_data['settings']['typography']['fontFamilies'] as $font_family ) {
104 $font_family_name = $font_family['name'] ?? Jetpack_Google_Font_Face::get_font_family_name( $font_family );
105 if ( $font_family_name ) {
106 $theme_fonts_map[ $font_family_name ] = true;
107 }
108 }
109
110 return $theme_fonts_map;
111 }
112
113 /**
114 * Register google fonts to the theme json data
115 *
116 * @param WP_Theme_JSON_Data $theme_json The theme json data of core.
117 * @return WP_Theme_JSON_Data The theme json data with registered google fonts.
118 */
119 function jetpack_register_google_fonts_to_theme_json( $theme_json ) {
120 $google_fonts_data = jetpack_get_google_fonts_data();
121 if ( ! $google_fonts_data ) {
122 return $theme_json;
123 }
124
125 $available_google_fonts_map = jetpack_get_available_google_fonts_map( $google_fonts_data );
126 $theme_fonts_map = jetpack_get_theme_fonts_map();
127 $google_fonts_families = array_values(
128 array_filter(
129 $google_fonts_data['fontFamilies'],
130 function ( $google_fonts_family ) use ( $available_google_fonts_map, $theme_fonts_map ) {
131 $name = $google_fonts_family['name'];
132
133 // Filter out the fonts that are provided by the active theme.
134 if ( isset( $theme_fonts_map[ $name ] ) && $theme_fonts_map[ $name ] ) {
135 return false;
136 }
137
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