Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93
/home/sportsfe.../httpdocs/clone/wp-inclu.../fonts
File: class-wp-font-face-resolver.php
<?php
[0] Fix | Delete
/**
[1] Fix | Delete
* WP_Font_Face_Resolver class.
[2] Fix | Delete
*
[3] Fix | Delete
* @package WordPress
[4] Fix | Delete
* @subpackage Fonts
[5] Fix | Delete
* @since 6.4.0
[6] Fix | Delete
*/
[7] Fix | Delete
[8] Fix | Delete
/**
[9] Fix | Delete
* The Font Face Resolver abstracts the processing of different data sources
[10] Fix | Delete
* (such as theme.json) for processing within the Font Face.
[11] Fix | Delete
*
[12] Fix | Delete
* This class is for internal core usage and is not supposed to be used by
[13] Fix | Delete
* extenders (plugins and/or themes).
[14] Fix | Delete
*
[15] Fix | Delete
* @access private
[16] Fix | Delete
*/
[17] Fix | Delete
class WP_Font_Face_Resolver {
[18] Fix | Delete
[19] Fix | Delete
/**
[20] Fix | Delete
* Gets fonts defined in theme.json.
[21] Fix | Delete
*
[22] Fix | Delete
* @since 6.4.0
[23] Fix | Delete
*
[24] Fix | Delete
* @return array Returns the font-families, each with their font-face variations.
[25] Fix | Delete
*/
[26] Fix | Delete
public static function get_fonts_from_theme_json() {
[27] Fix | Delete
$settings = wp_get_global_settings();
[28] Fix | Delete
[29] Fix | Delete
// Bail out early if there are no font settings.
[30] Fix | Delete
if ( empty( $settings['typography']['fontFamilies'] ) ) {
[31] Fix | Delete
return array();
[32] Fix | Delete
}
[33] Fix | Delete
[34] Fix | Delete
return static::parse_settings( $settings );
[35] Fix | Delete
}
[36] Fix | Delete
[37] Fix | Delete
/**
[38] Fix | Delete
* Parse theme.json settings to extract font definitions with variations grouped by font-family.
[39] Fix | Delete
*
[40] Fix | Delete
* @since 6.4.0
[41] Fix | Delete
*
[42] Fix | Delete
* @param array $settings Font settings to parse.
[43] Fix | Delete
* @return array Returns an array of fonts, grouped by font-family.
[44] Fix | Delete
*/
[45] Fix | Delete
private static function parse_settings( array $settings ) {
[46] Fix | Delete
$fonts = array();
[47] Fix | Delete
[48] Fix | Delete
foreach ( $settings['typography']['fontFamilies'] as $font_families ) {
[49] Fix | Delete
foreach ( $font_families as $definition ) {
[50] Fix | Delete
[51] Fix | Delete
// Skip if "fontFace" is not defined, meaning there are no variations.
[52] Fix | Delete
if ( empty( $definition['fontFace'] ) ) {
[53] Fix | Delete
continue;
[54] Fix | Delete
}
[55] Fix | Delete
[56] Fix | Delete
// Skip if "fontFamily" is not defined.
[57] Fix | Delete
if ( empty( $definition['fontFamily'] ) ) {
[58] Fix | Delete
continue;
[59] Fix | Delete
}
[60] Fix | Delete
[61] Fix | Delete
$font_family_name = static::maybe_parse_name_from_comma_separated_list( $definition['fontFamily'] );
[62] Fix | Delete
[63] Fix | Delete
// Skip if no font family is defined.
[64] Fix | Delete
if ( empty( $font_family_name ) ) {
[65] Fix | Delete
continue;
[66] Fix | Delete
}
[67] Fix | Delete
[68] Fix | Delete
$fonts[] = static::convert_font_face_properties( $definition['fontFace'], $font_family_name );
[69] Fix | Delete
}
[70] Fix | Delete
}
[71] Fix | Delete
[72] Fix | Delete
return $fonts;
[73] Fix | Delete
}
[74] Fix | Delete
[75] Fix | Delete
/**
[76] Fix | Delete
* Parse font-family name from comma-separated lists.
[77] Fix | Delete
*
[78] Fix | Delete
* If the given `fontFamily` is a comma-separated lists (example: "Inter, sans-serif" ),
[79] Fix | Delete
* parse and return the fist font from the list.
[80] Fix | Delete
*
[81] Fix | Delete
* @since 6.4.0
[82] Fix | Delete
*
[83] Fix | Delete
* @param string $font_family Font family `fontFamily' to parse.
[84] Fix | Delete
* @return string Font-family name.
[85] Fix | Delete
*/
[86] Fix | Delete
private static function maybe_parse_name_from_comma_separated_list( $font_family ) {
[87] Fix | Delete
if ( str_contains( $font_family, ',' ) ) {
[88] Fix | Delete
$font_family = explode( ',', $font_family )[0];
[89] Fix | Delete
}
[90] Fix | Delete
[91] Fix | Delete
return trim( $font_family, "\"'" );
[92] Fix | Delete
}
[93] Fix | Delete
[94] Fix | Delete
/**
[95] Fix | Delete
* Converts font-face properties from theme.json format.
[96] Fix | Delete
*
[97] Fix | Delete
* @since 6.4.0
[98] Fix | Delete
*
[99] Fix | Delete
* @param array $font_face_definition The font-face definitions to convert.
[100] Fix | Delete
* @param string $font_family_property The value to store in the font-face font-family property.
[101] Fix | Delete
* @return array Converted font-face properties.
[102] Fix | Delete
*/
[103] Fix | Delete
private static function convert_font_face_properties( array $font_face_definition, $font_family_property ) {
[104] Fix | Delete
$converted_font_faces = array();
[105] Fix | Delete
[106] Fix | Delete
foreach ( $font_face_definition as $font_face ) {
[107] Fix | Delete
// Add the font-family property to the font-face.
[108] Fix | Delete
$font_face['font-family'] = $font_family_property;
[109] Fix | Delete
[110] Fix | Delete
// Converts the "file:./" src placeholder into a theme font file URI.
[111] Fix | Delete
if ( ! empty( $font_face['src'] ) ) {
[112] Fix | Delete
$font_face['src'] = static::to_theme_file_uri( (array) $font_face['src'] );
[113] Fix | Delete
}
[114] Fix | Delete
[115] Fix | Delete
// Convert camelCase properties into kebab-case.
[116] Fix | Delete
$font_face = static::to_kebab_case( $font_face );
[117] Fix | Delete
[118] Fix | Delete
$converted_font_faces[] = $font_face;
[119] Fix | Delete
}
[120] Fix | Delete
[121] Fix | Delete
return $converted_font_faces;
[122] Fix | Delete
}
[123] Fix | Delete
[124] Fix | Delete
/**
[125] Fix | Delete
* Converts each 'file:./' placeholder into a URI to the font file in the theme.
[126] Fix | Delete
*
[127] Fix | Delete
* The 'file:./' is specified in the theme's `theme.json` as a placeholder to be
[128] Fix | Delete
* replaced with the URI to the font file's location in the theme. When a "src"
[129] Fix | Delete
* beings with this placeholder, it is replaced, converting the src into a URI.
[130] Fix | Delete
*
[131] Fix | Delete
* @since 6.4.0
[132] Fix | Delete
*
[133] Fix | Delete
* @param array $src An array of font file sources to process.
[134] Fix | Delete
* @return array An array of font file src URI(s).
[135] Fix | Delete
*/
[136] Fix | Delete
private static function to_theme_file_uri( array $src ) {
[137] Fix | Delete
$placeholder = 'file:./';
[138] Fix | Delete
[139] Fix | Delete
foreach ( $src as $src_key => $src_url ) {
[140] Fix | Delete
// Skip if the src doesn't start with the placeholder, as there's nothing to replace.
[141] Fix | Delete
if ( ! str_starts_with( $src_url, $placeholder ) ) {
[142] Fix | Delete
continue;
[143] Fix | Delete
}
[144] Fix | Delete
[145] Fix | Delete
$src_file = str_replace( $placeholder, '', $src_url );
[146] Fix | Delete
$src[ $src_key ] = get_theme_file_uri( $src_file );
[147] Fix | Delete
}
[148] Fix | Delete
[149] Fix | Delete
return $src;
[150] Fix | Delete
}
[151] Fix | Delete
[152] Fix | Delete
/**
[153] Fix | Delete
* Converts all first dimension keys into kebab-case.
[154] Fix | Delete
*
[155] Fix | Delete
* @since 6.4.0
[156] Fix | Delete
*
[157] Fix | Delete
* @param array $data The array to process.
[158] Fix | Delete
* @return array Data with first dimension keys converted into kebab-case.
[159] Fix | Delete
*/
[160] Fix | Delete
private static function to_kebab_case( array $data ) {
[161] Fix | Delete
foreach ( $data as $key => $value ) {
[162] Fix | Delete
$kebab_case = _wp_to_kebab_case( $key );
[163] Fix | Delete
$data[ $kebab_case ] = $value;
[164] Fix | Delete
if ( $kebab_case !== $key ) {
[165] Fix | Delete
unset( $data[ $key ] );
[166] Fix | Delete
}
[167] Fix | Delete
}
[168] Fix | Delete
[169] Fix | Delete
return $data;
[170] Fix | Delete
}
[171] Fix | Delete
}
[172] Fix | Delete
[173] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function