@@ -54,13 +54,22 @@ public function current_screen() {
54
54
* Print fonts that are used in global styles or block-level settings.
55
55
*/
56
56
public function print_font_faces () {
57
- $ fonts = $ this ->get_fonts ();
58
- $ fonts_to_print = array ();
57
+ $ fonts = WP_Font_Face_Resolver::get_fonts_from_theme_json ();
58
+ $ font_slug_aliases = $ this ->get_font_slug_aliases ();
59
+ $ fonts_to_print = array ();
59
60
60
61
$ this ->collect_global_styles_fonts ();
61
- $ this ->fonts_in_use = array_values ( array_unique ( $ this ->fonts_in_use , SORT_STRING ) );
62
- foreach ( $ fonts as $ font_family => $ font_faces ) {
63
- if ( in_array ( $ this ->format_font ( $ font_family ), $ this ->fonts_in_use , true ) ) {
62
+ $ fonts_in_use = array_values ( array_unique ( $ this ->fonts_in_use , SORT_STRING ) );
63
+ $ fonts_in_use = array_map (
64
+ function ( $ font_slug ) use ( $ font_slug_aliases ) {
65
+ return $ font_slug_aliases [ $ font_slug ] ?? $ font_slug ;
66
+ },
67
+ $ this ->fonts_in_use
68
+ );
69
+
70
+ foreach ( $ fonts as $ font_faces ) {
71
+ $ font_family = $ font_faces [0 ]['font-family ' ] ?? '' ;
72
+ if ( in_array ( $ this ->format_font ( $ font_family ), $ fonts_in_use , true ) ) {
64
73
$ fonts_to_print [ $ font_family ] = $ font_faces ;
65
74
}
66
75
}
@@ -141,26 +150,27 @@ public function format_font( $font_slug ) {
141
150
}
142
151
143
152
/**
144
- * Get all font definitions from theme json.
153
+ * Get the font slug aliases that maps the font slug to the font family if they are different.
154
+ *
155
+ * The font definition may define an alias slug name, so we have to add the map from the slug name to the font family.
156
+ * See https://github.com/WordPress/twentytwentyfour/blob/df92472089ede6fae5924c124a93c843b84e8cbd/theme.json#L215.
145
157
*/
146
- public function get_fonts () {
147
- $ fonts = WP_Font_Face_Resolver:: get_fonts_from_theme_json ();
158
+ public function get_font_slug_aliases () {
159
+ $ font_slug_aliases = array ();
148
160
149
- // The font definition might define an alias slug name, so we have to add the map from the slug name to font faces.
150
- // See https://github.com/WordPress/twentytwentyfour/blob/df92472089ede6fae5924c124a93c843b84e8cbd/theme.json#L215.
151
161
$ theme_json = WP_Theme_JSON_Resolver::get_theme_data ();
152
162
$ raw_data = $ theme_json ->get_data ();
153
163
if ( ! empty ( $ raw_data ['settings ' ]['typography ' ]['fontFamilies ' ] ) ) {
154
164
foreach ( $ raw_data ['settings ' ]['typography ' ]['fontFamilies ' ] as $ font ) {
155
- $ font_family_name = $ this ->get_font_family_name ( $ font );
165
+ $ font_family_name = $ this ->format_font ( $ this -> get_font_family_name ( $ font ) );
156
166
$ font_slug = $ font ['slug ' ] ?? '' ;
157
- if ( $ font_slug && ! array_key_exists ( $ font_slug, $ fonts ) && array_key_exists ( $ font_family_name , $ fonts ) ) {
158
- $ fonts [ $ font_slug ] = $ fonts [ $ font_family_name ] ;
167
+ if ( $ font_slug && $ font_slug !== $ font_family_name && ! array_key_exists ( $ font_slug , $ font_slug_aliases ) ) {
168
+ $ font_slug_aliases [ $ font_slug ] = $ font_family_name ;
159
169
}
160
170
}
161
171
}
162
172
163
- return $ fonts ;
173
+ return $ font_slug_aliases ;
164
174
}
165
175
166
176
/**
0 commit comments