PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 13.5.2
Jetpack – WP Security, Backup, Speed, & Growth v13.5.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
183 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 * Register google fonts to the theme json data
88 *
89 * @param WP_Theme_JSON_Data $theme_json The theme json data of core.
90 * @return WP_Theme_JSON_Data The theme json data with registered google fonts.
91 */
92 function jetpack_register_google_fonts_to_theme_json( $theme_json ) {
93 $google_fonts_data = jetpack_get_google_fonts_data();
94 if ( ! $google_fonts_data ) {
95 return $theme_json;
96 }
97
98 $available_google_fonts_map = jetpack_get_available_google_fonts_map( $google_fonts_data );
99 $google_fonts_families = array_values(
100 array_filter(
101 $google_fonts_data['fontFamilies'],
102 function ( $google_fonts_family ) use ( $available_google_fonts_map ) {
103 $name = $google_fonts_family['name'];
104 return $available_google_fonts_map[ $name ] ?? false;
105 }
106 )
107 );
108
109 $raw_data = $theme_json->get_data();
110 $origin = 'default';
111 if ( empty( $raw_data['settings']['typography']['fontFamilies'][ $origin ] ) ) {
112 $raw_data['settings']['typography']['fontFamilies'][ $origin ] = array();
113 }
114
115 foreach ( $google_fonts_families as $font_family ) {
116 $raw_data['settings']['typography']['fontFamilies'][ $origin ][] = $font_family;
117 }
118
119 $theme_json_class = get_class( $theme_json );
120 return new $theme_json_class( $raw_data, $origin );
121 }
122
123 add_filter( 'wp_theme_json_data_default', 'jetpack_register_google_fonts_to_theme_json' );
124
125 /**
126 * Filter out the deprecated font families that are from the jetpack-google-fonts provider.
127 *
128 * @param object[] $font_families The font families.
129 * @return object[] The filtered font families.
130 */
131 function jetpack_google_fonts_filter_out_deprecated_font_data( $font_families ) {
132 return array_values(
133 array_filter(
134 $font_families,
135 function ( $font_family ) {
136 $has_deprecated_google_fonts_data = false;
137
138 if ( isset( $font_family['fontFace'] ) ) {
139 foreach ( $font_family['fontFace'] as $font_face ) {
140 $provider = $font_face['provider'] ?? '';
141 if ( $provider === 'jetpack-google-fonts' ) {
142 $has_deprecated_google_fonts_data = true;
143 break;
144 }
145 }
146 }
147
148 return ! $has_deprecated_google_fonts_data;
149 }
150 )
151 );
152 }
153
154 /**
155 * Unregister the deprecated jetpack-google-fonts provider from theme json data that were stored
156 * before we moved to the Font Library.
157 *
158 * @param WP_Theme_JSON_Data $theme_json The theme json data.
159 * @return WP_Theme_JSON_Data The filtered theme json data.
160 */
161 function jetpack_unregister_deprecated_google_fonts_from_theme_json_data( $theme_json ) {
162 $raw_data = $theme_json->get_data();
163 $origin = 'theme';
164 if ( empty( $raw_data['settings']['typography']['fontFamilies'][ $origin ] ) ) {
165 return $theme_json;
166 }
167
168 // Filter out the font definitions that are from the jetpack-google-fonts provider.
169 $raw_data['settings']['typography']['fontFamilies'][ $origin ] = jetpack_google_fonts_filter_out_deprecated_font_data(
170 $raw_data['settings']['typography']['fontFamilies'][ $origin ]
171 );
172
173 $theme_json_class = get_class( $theme_json );
174 return new $theme_json_class( $raw_data, 'custom' );
175 }
176
177 add_filter( 'wp_theme_json_data_theme', 'jetpack_unregister_deprecated_google_fonts_from_theme_json_data' );
178 add_filter( 'wp_theme_json_data_user', 'jetpack_unregister_deprecated_google_fonts_from_theme_json_data' );
179
180 // Initialize Jetpack Google Font Face to avoid printing **ALL** google fonts provided by this module.
181 // See p1700040028362329-slack-C4GAQ900P and p7DVsv-jib-p2
182 new Jetpack_Google_Font_Face();
183