PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 13.0.2
Jetpack – WP Security, Backup, Speed, & Growth v13.0.2
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
215 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 google fonts data from user's theme json data that were stored by accident.
190 *
191 * @param WP_Theme_JSON_Data $theme_json The theme json data of user.
192 * @return WP_Theme_JSON_Data The filtered theme json data.
193 */
194 function jetpack_unregister_deprecated_google_fonts_from_theme_json_data_user( $theme_json ) {
195 $raw_data = $theme_json->get_data();
196 $origin = 'theme';
197 if ( empty( $raw_data['settings']['typography']['fontFamilies'][ $origin ] ) ) {
198 return $theme_json;
199 }
200
201 // Filter out the font definitions that are from the jetpack-google-fonts provider.
202 $raw_data['settings']['typography']['fontFamilies'][ $origin ] = jetpack_google_fonts_filter_out_deprecated_font_data(
203 $raw_data['settings']['typography']['fontFamilies'][ $origin ]
204 );
205
206 $theme_json_class = get_class( $theme_json );
207 return new $theme_json_class( $raw_data, 'custom' );
208 }
209
210 add_filter( 'wp_theme_json_data_user', 'jetpack_unregister_deprecated_google_fonts_from_theme_json_data_user' );
211
212 // Initialize Jetpack Google Font Face to avoid printing **ALL** google fonts provided by this module.
213 // See p1700040028362329-slack-C4GAQ900P and p7DVsv-jib-p2
214 new Jetpack_Google_Font_Face();
215