PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.9.5
Jetpack – WP Security, Backup, Speed, & Growth v12.9.5
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
216 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 /**
9 * Gets the Google Fonts data
10 *
11 * @return object[] The collection data of the Google Fonts.
12 */
13 function jetpack_get_google_fonts_data() {
14 $default_google_fonts_api_url = 'https://fonts.gstatic.com';
15 $jetpack_google_fonts_collection_url = 'https://s0.wp.com/i/font-collections/jetpack-google-fonts.json';
16 $cache_key = 'jetpack_google_fonts_' . md5( $jetpack_google_fonts_collection_url );
17 $data = get_transient( $cache_key );
18 if ( $data === false ) {
19 $response = wp_remote_get( $jetpack_google_fonts_collection_url );
20 if ( is_wp_error( $response ) || wp_remote_retrieve_response_code( $response ) !== 200 ) {
21 return null;
22 }
23
24 $data = json_decode( wp_remote_retrieve_body( $response ), true );
25 if ( $data === null ) {
26 return null;
27 }
28
29 set_transient( $cache_key, $data, DAY_IN_SECONDS );
30 }
31
32 // Replace the google fonts api url if the custom one is provided.
33 $custom_google_fonts_api_url = \esc_url(
34 /** This filter is documented in projects/packages/google-fonts-provider/src/class-google-fonts-provider.php */
35 apply_filters( 'jetpack_google_fonts_api_url', $default_google_fonts_api_url )
36 );
37 if ( $custom_google_fonts_api_url !== $default_google_fonts_api_url ) {
38 foreach ( $data['fontFamilies'] as &$font_family ) {
39 foreach ( $font_family['fontFace'] as &$font_face ) {
40 $font_face['src'] = str_replace(
41 $default_google_fonts_api_url,
42 $custom_google_fonts_api_url,
43 $font_face['src']
44 );
45 }
46 }
47 }
48
49 if ( is_array( $data ) && is_array( $data['fontFamilies'] ) ) {
50 return $data;
51 }
52 }
53
54 /**
55 * Gets the map of the available Google Fonts
56 *
57 * @param object[] $google_fonts_data The collection data of the Google Fonts.
58 * @return object[] The map of the the available Google Fonts.
59 */
60 function jetpack_get_available_google_fonts_map( $google_fonts_data ) {
61 $jetpack_google_fonts_list = array_map(
62 function ( $font_family ) {
63 return $font_family['name'];
64 },
65 $google_fonts_data['fontFamilies']
66 );
67
68 /** This filter is documented in modules/google-fonts/wordpress-6.3/load-google-fonts.php */
69 $google_font_list = apply_filters( 'jetpack_google_fonts_list', $jetpack_google_fonts_list );
70 $available_google_fonts_map = array();
71
72 foreach ( $google_font_list as $google_font ) {
73 $available_google_fonts_map[ $google_font ] = true;
74 }
75
76 return $available_google_fonts_map;
77 }
78
79 /**
80 * Gets the font families of the active theme
81 *
82 * @return object[] The font families of the active theme.
83 */
84 function jetpack_get_theme_fonts_map() {
85 if ( ! class_exists( 'WP_Theme_JSON_Resolver' ) ) {
86 return array();
87 }
88
89 $theme_json = WP_Theme_JSON_Resolver::get_theme_data();
90 $raw_data = $theme_json->get_data();
91 if ( empty( $raw_data['settings']['typography']['fontFamilies'] ) ) {
92 return array();
93 }
94
95 $theme_fonts_map = array();
96 foreach ( $raw_data['settings']['typography']['fontFamilies'] as $font_family ) {
97 if ( isset( $font_family['name'] ) ) {
98 $theme_fonts_map[ $font_family['name'] ] = true;
99 }
100 }
101
102 return $theme_fonts_map;
103 }
104
105 /**
106 * Register google fonts to the theme json data
107 *
108 * @param WP_Theme_JSON_Data $theme_json The theme json data of core.
109 * @return WP_Theme_JSON_Data The theme json data with registered google fonts.
110 */
111 function jetpack_register_google_fonts_to_theme_json( $theme_json ) {
112 $google_fonts_data = jetpack_get_google_fonts_data();
113 if ( ! $google_fonts_data ) {
114 return $theme_json;
115 }
116
117 $available_google_fonts_map = jetpack_get_available_google_fonts_map( $google_fonts_data );
118 $theme_fonts_map = jetpack_get_theme_fonts_map();
119 $google_fonts_families = array_values(
120 array_filter(
121 $google_fonts_data['fontFamilies'],
122 function ( $google_fonts_family ) use ( $available_google_fonts_map, $theme_fonts_map ) {
123 $name = $google_fonts_family['name'];
124
125 // Filter out the fonts that are provided by the active theme.
126 if ( isset( $theme_fonts_map[ $name ] ) && $theme_fonts_map[ $name ] ) {
127 return false;
128 }
129
130 return isset( $available_google_fonts_map[ $name ] )
131 ? $available_google_fonts_map[ $name ]
132 : false;
133 }
134 )
135 );
136
137 $raw_data = $theme_json->get_data();
138 $origin = 'default';
139 if ( empty( $raw_data['settings']['typography']['fontFamilies'][ $origin ] ) ) {
140 $raw_data['settings']['typography']['fontFamilies'][ $origin ] = array();
141 }
142
143 foreach ( $google_fonts_families as $font_family ) {
144 $raw_data['settings']['typography']['fontFamilies'][ $origin ][] = $font_family;
145 }
146
147 $theme_json_class = get_class( $theme_json );
148 return new $theme_json_class( $raw_data, $origin );
149 }
150
151 add_filter( 'wp_theme_json_data_default', 'jetpack_register_google_fonts_to_theme_json' );
152
153 /**
154 * Filter out the deprecated font families that are from the jetpack-google-fonts provider.
155 *
156 * @param object[] $font_families The font families.
157 * @return object[] The filtered font families.
158 */
159 function jetpack_google_fonts_filter_out_deprecated_font_data( $font_families ) {
160 return array_values(
161 array_filter(
162 $font_families,
163 function ( $font_family ) {
164 $has_deprecated_google_fonts_data = false;
165
166 if ( isset( $font_family['fontFace'] ) ) {
167 foreach ( $font_family['fontFace'] as $font_face ) {
168 $provider = isset( $font_face['provider'] ) ? $font_face['provider'] : '';
169 if ( $provider === 'jetpack-google-fonts' ) {
170 $has_deprecated_google_fonts_data = true;
171 break;
172 }
173 }
174 }
175
176 return ! $has_deprecated_google_fonts_data;
177 }
178 )
179 );
180 }
181
182 /**
183 * Unregister the google fonts data from user's theme json data that were stored by accident.
184 *
185 * @param WP_Theme_JSON_Data $theme_json The theme json data of user.
186 * @return WP_Theme_JSON_Data The filtered theme json data.
187 */
188 function jetpack_unregister_deprecated_google_fonts_from_theme_json_data_user( $theme_json ) {
189 $raw_data = $theme_json->get_data();
190 $origin = 'theme';
191 if ( empty( $raw_data['settings']['typography']['fontFamilies'][ $origin ] ) ) {
192 return $theme_json;
193 }
194
195 // Filter out the font definitions that are from the jetpack-google-fonts provider.
196 $raw_data['settings']['typography']['fontFamilies'][ $origin ] = jetpack_google_fonts_filter_out_deprecated_font_data(
197 $raw_data['settings']['typography']['fontFamilies'][ $origin ]
198 );
199
200 $theme_json_class = get_class( $theme_json );
201 return new $theme_json_class( $raw_data, 'custom' );
202 }
203
204 add_filter( 'wp_theme_json_data_user', 'jetpack_unregister_deprecated_google_fonts_from_theme_json_data_user' );
205
206 if ( ! class_exists( 'Jetpack_Google_Font_Face' ) ) {
207 /**
208 * Load Jetpack Google Font Face
209 */
210 require_once __DIR__ . '/class-jetpack-google-font-face.php';
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 }
216