Title: WP_Font_Utils::get_font_face_slug
Published: April 3, 2024
Last modified: August 20, 2026

---

# WP_Font_Utils::get_font_face_slug( array $settings ): string

## In this article

 * [Description](https://developer.wordpress.org/reference/classes/wp_font_utils/get_font_face_slug/?output_format=md#description)
 * [Parameters](https://developer.wordpress.org/reference/classes/wp_font_utils/get_font_face_slug/?output_format=md#parameters)
 * [Return](https://developer.wordpress.org/reference/classes/wp_font_utils/get_font_face_slug/?output_format=md#return)
 * [Source](https://developer.wordpress.org/reference/classes/wp_font_utils/get_font_face_slug/?output_format=md#source)
 * [Related](https://developer.wordpress.org/reference/classes/wp_font_utils/get_font_face_slug/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/classes/wp_font_utils/get_font_face_slug/?output_format=md#changelog)

[ Back to top](https://developer.wordpress.org/reference/classes/wp_font_utils/get_font_face_slug/?output_format=md#wp--skip-link--target)

This function’s access is marked private. This means it is not intended for use 
by plugin or theme developers, only by core. It is listed here for completeness.

Generates a slug from font face properties, e.g. `open sans;normal;400;100%;U+0-
10FFFF`

## 󠀁[Description](https://developer.wordpress.org/reference/classes/wp_font_utils/get_font_face_slug/?output_format=md#description)󠁿

Used for comparison with other font faces in the same family, to prevent duplicates
that would both match according the CSS font matching spec. Uses only simple case-
insensitive matching for fontFamily and unicodeRange, so does not handle overlapping
font-family lists or unicode ranges.

## 󠀁[Parameters](https://developer.wordpress.org/reference/classes/wp_font_utils/get_font_face_slug/?output_format=md#parameters)󠁿

 `$settings`arrayrequired

Font face settings.

 * `fontFamily` string
 * Font family name.
 * `fontStyle` string
 * Optional font style, defaults to `'normal'`.
 * `fontWeight` string
 * Optional font weight, defaults to 400.
 * `fontStretch` string
 * Optional font stretch, defaults to `'100%'`.
 * `unicodeRange` string
 * Optional unicode range, defaults to `'U+0-10FFFF'`.

## 󠀁[Return](https://developer.wordpress.org/reference/classes/wp_font_utils/get_font_face_slug/?output_format=md#return)󠁿

 string Font face slug.

## 󠀁[Source](https://developer.wordpress.org/reference/classes/wp_font_utils/get_font_face_slug/?output_format=md#source)󠁿

    ```php
    public static function get_font_face_slug( $settings ) {
    	$defaults = array(
    		'fontFamily'   => '',
    		'fontStyle'    => 'normal',
    		'fontWeight'   => '400',
    		'fontStretch'  => '100%',
    		'unicodeRange' => 'U+0-10FFFF',
    	);
    	$settings = wp_parse_args( $settings, $defaults );
    	if ( function_exists( 'mb_strtolower' ) ) {
    		$font_family = mb_strtolower( $settings['fontFamily'] );
    	} else {
    		$font_family = strtolower( $settings['fontFamily'] );
    	}
    	$font_style    = strtolower( $settings['fontStyle'] );
    	$font_weight   = strtolower( $settings['fontWeight'] );
    	$font_stretch  = strtolower( $settings['fontStretch'] );
    	$unicode_range = strtoupper( $settings['unicodeRange'] );

    	// Convert weight keywords to numeric strings.
    	$font_weight = str_replace( array( 'normal', 'bold' ), array( '400', '700' ), $font_weight );

    	// Convert stretch keywords to numeric strings.
    	$font_stretch_map = array(
    		'ultra-condensed' => '50%',
    		'extra-condensed' => '62.5%',
    		'condensed'       => '75%',
    		'semi-condensed'  => '87.5%',
    		'normal'          => '100%',
    		'semi-expanded'   => '112.5%',
    		'expanded'        => '125%',
    		'extra-expanded'  => '150%',
    		'ultra-expanded'  => '200%',
    	);
    	$font_stretch     = str_replace( array_keys( $font_stretch_map ), array_values( $font_stretch_map ), $font_stretch );

    	$slug_elements = array( $font_family, $font_style, $font_weight, $font_stretch, $unicode_range );

    	$slug_elements = array_map(
    		function ( $elem ) {
    			// Remove quotes to normalize font-family names, and ';' to use as a separator.
    			$elem = trim( str_replace( array( '"', "'", ';' ), '', $elem ) );

    			// Normalize comma separated lists by removing whitespace in between items,
    			// but keep whitespace within items (e.g. "Open Sans" and "OpenSans" are different fonts).
    			// CSS spec for whitespace includes: U+000A LINE FEED, U+0009 CHARACTER TABULATION, or U+0020 SPACE,
    			// which by default are all matched by \s in PHP.
    			return preg_replace( '/,\s+/', ',', $elem );
    		},
    		$slug_elements
    	);

    	return sanitize_text_field( implode( ';', $slug_elements ) );
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/fonts/class-wp-font-utils.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/7.1/src/wp-includes/fonts/class-wp-font-utils.php#L104)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/7.1/src/wp-includes/fonts/class-wp-font-utils.php#L104-L157)

## 󠀁[Related](https://developer.wordpress.org/reference/classes/wp_font_utils/get_font_face_slug/?output_format=md#related)󠁿

| Uses | Description | 
| [sanitize_text_field()](https://developer.wordpress.org/reference/functions/sanitize_text_field/)`wp-includes/formatting.php` |

Sanitizes a string from user input or from the database.

  | 
| [wp_parse_args()](https://developer.wordpress.org/reference/functions/wp_parse_args/)`wp-includes/functions.php` |

Merges user defined arguments into defaults array.

  |

| Used by | Description | 
| [WP_REST_Font_Faces_Controller::prepare_item_for_database()](https://developer.wordpress.org/reference/classes/wp_rest_font_faces_controller/prepare_item_for_database/)`wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php` |

Prepares a single font face post for creation.

  | 
| [WP_REST_Font_Faces_Controller::create_item()](https://developer.wordpress.org/reference/classes/wp_rest_font_faces_controller/create_item/)`wp-includes/rest-api/endpoints/class-wp-rest-font-faces-controller.php` |

Creates a font face for the parent font family.

  |

## 󠀁[Changelog](https://developer.wordpress.org/reference/classes/wp_font_utils/get_font_face_slug/?output_format=md#changelog)󠁿

| Version | Description | 
| [6.5.0](https://developer.wordpress.org/reference/since/6.5.0/) | Introduced. |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwp_font_utils%2Fget_font_face_slug%2F)
before being able to contribute a note or feedback.