PluginProbe ʕ •ᴥ•ʔ
Jetpack – WP Security, Backup, Speed, & Growth / 12.8.3
Jetpack – WP Security, Backup, Speed, & Growth v12.8.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
load-google-fonts.php 2 years ago
load-google-fonts.php
150 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 return $data;
50 }
51
52 /**
53 * Gets the map of the available Google Fonts
54 *
55 * @param object[] $google_fonts_data The collection data of the Google Fonts.
56 * @return object[] The map of the the available Google Fonts.
57 */
58 function jetpack_get_available_google_fonts_map( $google_fonts_data ) {
59 $jetpack_google_fonts_list = array_map(
60 function ( $font_family ) {
61 return $font_family['name'];
62 },
63 $google_fonts_data['fontFamilies']
64 );
65
66 /** This filter is documented in modules/google-fonts/wordpress-6.3/load-google-fonts.php */
67 $google_font_list = apply_filters( 'jetpack_google_fonts_list', $jetpack_google_fonts_list );
68 $available_google_fonts_map = array();
69
70 foreach ( $google_font_list as $google_font ) {
71 $available_google_fonts_map[ $google_font ] = true;
72 }
73
74 return $available_google_fonts_map;
75 }
76
77 /**
78 * Gets the font families of the active theme
79 *
80 * @return object[] The font families of the active theme.
81 */
82 function jetpack_get_theme_fonts_map() {
83 if ( ! class_exists( 'WP_Theme_JSON_Resolver' ) ) {
84 return array();
85 }
86
87 $theme_json = WP_Theme_JSON_Resolver::get_theme_data();
88 $raw_data = $theme_json->get_data();
89 if ( empty( $raw_data['settings']['typography']['fontFamilies'] ) ) {
90 return array();
91 }
92
93 $theme_fonts_map = array();
94 foreach ( $raw_data['settings']['typography']['fontFamilies'] as $font_family ) {
95 if ( isset( $font_family['name'] ) ) {
96 $theme_fonts_map[ $font_family['name'] ] = true;
97 }
98 }
99
100 return $theme_fonts_map;
101 }
102
103 /**
104 * Register google fonts to the theme json data
105 *
106 * @param WP_Theme_JSON_Data $theme_json The theme json data of core.
107 * @return WP_Theme_JSON_Data The theme json data with registered google fonts.
108 */
109 function jetpack_register_google_fonts_to_theme_json( $theme_json ) {
110 $google_fonts_data = jetpack_get_google_fonts_data();
111 if ( ! $google_fonts_data ) {
112 return $theme_json;
113 }
114
115 $available_google_fonts_map = jetpack_get_available_google_fonts_map( $google_fonts_data );
116 $theme_fonts_map = jetpack_get_theme_fonts_map();
117 $google_fonts_families = array_values(
118 array_filter(
119 $google_fonts_data['fontFamilies'],
120 function ( $google_fonts_family ) use ( $available_google_fonts_map, $theme_fonts_map ) {
121 $name = $google_fonts_family['name'];
122
123 // Filter out the fonts that are provided by the active theme.
124 if ( isset( $theme_fonts_map[ $name ] ) && $theme_fonts_map[ $name ] ) {
125 return false;
126 }
127
128 return isset( $available_google_fonts_map[ $name ] )
129 ? $available_google_fonts_map[ $name ]
130 : false;
131 }
132 )
133 );
134
135 $raw_data = $theme_json->get_data();
136 $origin = 'default';
137 if ( empty( $raw_data['settings']['typography']['fontFamilies'][ $origin ] ) ) {
138 $raw_data['settings']['typography']['fontFamilies'][ $origin ] = array();
139 }
140
141 foreach ( $google_fonts_families as $font_family ) {
142 $raw_data['settings']['typography']['fontFamilies'][ $origin ][] = $font_family;
143 }
144
145 $theme_json_class = get_class( $theme_json );
146 return new $theme_json_class( $raw_data, $origin );
147 }
148
149 add_filter( 'wp_theme_json_data_default', 'jetpack_register_google_fonts_to_theme_json' );
150