# twentig/0.7/inc/font.php

Twentig Supercharged Block Editor – Blocks, Patterns, Starter Sites, Portfolio, version 0.7. 649 lines.

- Page: https://pluginprobe.com/plugins/twentig/0.7/code/inc/font.php
- Raw: https://pluginprobe.com/plugins/twentig/0.7/raw/inc/font.php
- Modified: 2020-03-15T23:29:42+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/twentig/0.7/code/inc/font.php#L10-L20`.

```php
<?php

/**
 * Returns custom Google fonts URL based on Customizer settings.
 */
function twentig_fonts_url() {
	$fonts_url 				= '';
	$fonts 					= [];
	$font_sets 				= []; 
	$body_font 				= get_theme_mod( 'twentig_body_font' );
	$heading_font 			= get_theme_mod( 'twentig_heading_font' );
	$heading_font_weight 	= get_theme_mod( 'twentig_heading_font_weight', 700 );
	$menu_font				= get_theme_mod( 'twentig_menu_font' );
	$menu_font_weight 		= get_theme_mod( 'twentig_menu_font_weight' );
	$secondary_font 		= get_theme_mod( 'twentig_secondary_font' );

	if ( $body_font && 'sans-serif' !== $body_font ) {
		$fonts[ $body_font ] = [ '400', '400i', '700' ];
		if ( 'body' === $menu_font ) {
			$fonts[ $body_font ][] = $menu_font_weight; 
		}
	}

	if ( $heading_font && 'sans-serif' !== $heading_font ) {
		if ( ! isset( $fonts[ $heading_font ] ) ) {
			$fonts[ $heading_font ] = [];
		}
		$fonts[ $heading_font ][] = $heading_font_weight; 
		
		if ( 'heading' === $menu_font ) {
			$fonts[ $heading_font ][] = $menu_font_weight; 
		}

		if ( ! in_array( '400', $fonts[ $heading_font ] ) ) {
			$fonts[ $heading_font ][] = '400'; 
		}

		if ( 'heading' === $secondary_font ) {			
			if ( ! in_array( '600', $fonts[ $heading_font ] ) && ! in_array( '700', $fonts[ $heading_font ] ) ) {
				$fonts[ $heading_font ][] = '700'; 
			}
		}
	}

	if ( ! empty( $fonts ) ) {

		foreach ( $fonts as $font_family => $variants ) {
			$variants = array_unique( $variants );					
			$font_sets[] = $font_family . ':' . implode( ',', $variants );
		}

		$query_args = array(
			'family' 	=> urlencode( implode( '|', $font_sets ) ),
			'subset' 	=> urlencode( 'latin,latin-ext' ),
			'display' 	=> urlencode( 'fallback' ),
		);
		$fonts_url = add_query_arg( $query_args, 'https://fonts.googleapis.com/css' );		
	}	

	return apply_filters( 'twentig_google_fonts_url', esc_url_raw( $fonts_url ) );
}


/**
 * Returns font choices for body.
 */
function twentig_get_body_fonts() {
	$font_options = array(
		''				=> __( 'Default Theme Font', 'twentig' ),
		'sans-serif' 	=> __( 'UI System Font', 'twentig' ),	 
	);

	$google_font_options = twentig_get_fonts();
	foreach ( $google_font_options as $font ) {
		if ( isset( $font[ 'bodyText' ] ) && ! $font['bodyText'] ) {
			continue;
		}
		$font_options[ $font['family'] ] = $font['family'];
	}
	return $font_options;
}

/**
 * Returns font choices for headings.
 */
function twentig_get_heading_fonts() {
	$font_options = array(
		''				=> __( 'Default Theme Font', 'twentig' ),
		'sans-serif'	=> __( 'UI System Font', 'twentig' ),	 
	);

	$google_font_options = twentig_get_fonts();
	foreach ( $google_font_options as $font ) {
		if ( isset( $font[ 'headingText' ] ) && ! $font['headingText'] ) {
			continue;
		}
		$font_options[ $font['family'] ] = $font['family'];
	}
	return $font_options;
}

/**
 * Returns font stack for a given font.
 */
function twentig_get_font_stack( $font_name ) {
	if ( 'sans-serif' === $font_name ) {
		return '-apple-system, BlinkMacSystemFont, "Segoe UI", "Helvetica Neue", Helvetica, sans-serif';
	}
	return "'" . $font_name . "', ". twentig_get_font_fallback( $font_name );
}

/**
 * Returns font fallback for a given font.
 */
function twentig_get_font_fallback( $font_name ) {
	$fonts = twentig_get_fonts();
	foreach ( $fonts as $font ) {
		if ( $font_name == $font['family'] ) {
			return $font['category'];
		}
	}
	return 'sans-serif';
}

/**
 * Returns all available fonts.
 */
function twentig_get_fonts() {
	
	$fonts = array(
		array(
			'family' 	=> 'Alegreya',
			'category'	=> 'serif',
			'variants' 	=> array( '400', '500', '700', '800', '900' ),
		),
		array(
			'family' 	=> 'Alegreya Sans',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '500', '700', '800', '900' ),
		),
		array(
			'family' 	=> 'Archivo Narrow',
			'category'	=> 'sans-serif',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '500', '600', '700' ),
		),
		array(
			'family' 	=> 'Arimo',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Arvo',
			'category'	=> 'serif',
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family'	=> 'Arya',
			'category'	=> 'sans-serif',
			'bodyText'	=> false,
			'variants'	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Asap',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '500', '600', '700' ),
		),
		array(
			'family' 	=> 'Asap Condensed',
			'category'	=> 'sans-serif',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '500', '600', '700' ),
		),
		array(
			'family' 	=> 'B612',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Barlow',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '500', '600', '700', '800', '900' ),
		),
		array(
			'family' 	=> 'Barlow Condensed',
			'category'	=> 'sans-serif',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '500', '600', '700', '800', '900' ),
		),
		array(
			'family' 	=> 'Big Shoulders Display',
			'category'	=> 'sans-serif',
			'bodyText'	=> false,
			'variants' 	=> array( '400', '500', '600', '700', '800', '900' ),
		),
		array(
			'family' 	=> 'BioRhyme',
			'category'	=> 'serif',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '700', '800' ),
		),
		array(
			'family' 	=> 'Bitter',
			'category'	=> 'serif',
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Cabin',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '500', '600', '700' ),
		),
		array(
			'family' 	=> 'Cabin Condensed',
			'category'	=> 'sans-serif',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '500', '600', '700' ),
		),
		array(
			'family' 	=> 'Cardo',
			'category'	=> 'serif',
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Chivo',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '700', '900' ),
		),
		array(
			'family' 	=> 'Comfortaa',
			'category'	=> 'cursive',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Cormorant Garamond',
			'category'	=> 'serif',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '500', '600', '700' ),
		),
		array(
			'family' 	=> 'Cousine',
			'category'	=> 'monospace',
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Crimson Pro',
			'category'	=> 'serif',
			'variants' 	=> array( '400', '500', '600', '700', '800', '900' ),
		),
		array(
			'family' 	=> 'DM Sans',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '500', '700' ),
		),
		array(
			'family' 	=> 'Domine',
			'category'	=> 'serif',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Dosis',
			'category'	=> 'sans-serif',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '500', '600', '700', '800' ),
		),
		array(
			'family' 	=> 'EB Garamond',
			'category'	=> 'serif',
			'variants' 	=> array( '400', '500', '600', '700', '800' ),
		),
		array(
			'family' 	=> 'Eczar',
			'category'	=> 'serif',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '500', '600', '700', '800' ),
		),
		array(
			'family' 	=> 'Exo 2',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '500', '600', '700', '800', '900' ),
		),
		array(
			'family' 	=> 'Fira Sans',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '500', '600', '700', '800', '900' ),
		),
		array(
			'family' 	=> 'Fira Sans Condensed',
			'category'	=> 'sans-serif',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '500', '600', '700', '800', '900' ),
		),
		array(
			'family' 	=> 'Gentium Basic',
			'category'	=> 'serif',
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'IBM Plex Mono',
			'category'	=> 'monospace',
			'variants' 	=> array( '400', '500', '600', '700' ),
		),
		array(
			'family' 	=> 'IBM Plex Sans',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '500', '600', '700' ),
		),
		array(
			'family' 	=> 'IBM Plex Sans Condensed',
			'category'	=> 'sans-serif',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '500', '600', '700' ),
		),
		array(
			'family' 	=> 'IBM Plex Serif',
			'category'	=> 'serif',
			'variants' 	=> array( '400', '500', '600', '700' ),
		),
		array(
			'family' 	=> 'Inconsolata',
			'category'	=> 'monospace',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Inknut Antiqua',
			'category'	=> 'serif',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '500', '600', '700', '800', '900' ),
		),
		array(
			'family' 	=> 'Inria Serif',
			'category'	=> 'serif',
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Josefin Sans',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '600', '700' ),
		),
		array(
			'family' 	=> 'Josefin Slab',
			'category'	=> 'serif',
			'variants' 	=> array( '400', '600', '700' ),
		),
		array(
			'family' 	=> 'Kalam',
			'category'	=> 'cursive',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Karla',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Lato',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '700', '900' ),
		),
		array(
			'family' 	=> 'Lekton',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Libre Baskerville',
			'category'	=> 'serif',
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Libre Franklin',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '500', '600', '700', '800', '900' ),
		),
		array(
			'family' 	=> 'Lora',
			'category'	=> 'serif',
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Merriweather',
			'category'	=> 'serif',
			'variants' 	=> array( '400', '700', '900' ),
		),
		array(
			'family' 	=> 'Merriweather Sans',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '700', '800' ),
		),
		array(
			'family' 	=> 'Montserrat',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '500', '600', '700', '800', '900' ),
		),
		array(
			'family' 	=> 'Muli',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '600', '700', '800', '900' ),
		),
		array(
			'family' 	=> 'Neuton',
			'category'	=> 'serif',
			'variants' 	=> array( '400', '700', '800' ),
		),
		array(
			'family' 	=> 'Noto Sans',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Noto Serif',
			'category'	=> 'serif',
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Nunito',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '600', '700', '800', '900' ),
		),
		array(
			'family' 	=> 'Nunito Sans',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '600', '700', '800', '900' ),
		),
		array(
			'family' 	=> 'Old Standard TT',
			'category'	=> 'serif',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Open Sans',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '600', '700', '800' ),
		),
		array(
			'family' 	=> 'Oswald',
			'category'	=> 'sans-serif',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '500', '600', '700' ),
		),
		array(
			'family' 	=> 'Overpass',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '600', '700', '800', '900' ),
		),
		array(
			'family' 	=> 'Playfair Display',
			'category'	=> 'serif',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '700', '900' ),
		),
		array(
			'family' 	=> 'Poppins',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '500', '600', '700', '800', '900' ),
		),
		array(
			'family' 	=> 'Proza Libre',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '500', '600', '700', '800' ),
		),
		array(
			'family' 	=> 'PT Sans',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'PT Sans Narrow',
			'category'	=> 'sans-serif',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'PT Serif',
			'category'	=> 'serif',
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Quattrocento',
			'category'	=> 'serif',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Quattrocento Sans',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Rajdhani',
			'category'	=> 'sans-serif',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '500', '600', '700' ),
		),
		array(
			'family' 	=> 'Red Hat Display',
			'category'	=> 'sans-serif',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '500', '700', '900' ),
		),
		array(
			'family' 	=> 'Red Hat Text',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '500', '700' ),
		),
		array(
			'family' 	=> 'Raleway',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '500', '600', '700', '800', '900' ),
		),
		array(
			'family' 	=> 'Roboto',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '500', '700', '900' ),
		),
		array(
			'family' 	=> 'Roboto Condensed',
			'category'	=> 'sans-serif',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Roboto Mono',
			'category'	=> 'monospace',
			'variants' 	=> array( '400', '500', '700' ),
		),
		array(
			'family' 	=> 'Roboto Slab',
			'category'	=> 'serif',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Rubik',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '500', '700', '900' ),
		),
		array(
			'family' 	=> 'Rufina',
			'category'	=> 'serif',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Signika',
			'category'	=> 'sans-serif',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '600', '700' ),
		),
		array(
			'family' 	=> 'Source Code Pro',
			'category'	=> 'monospace',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '500', '600', '700', '900' ),
		),
		array(
			'family' 	=> 'Source Sans Pro',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '600', '700', '900' ),
		),
		array(
			'family' 	=> 'Source Serif Pro',
			'category'	=> 'serif',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '600', '700' ),
		),
		array(
			'family' 	=> 'Space Mono',
			'category'	=> 'monospace',
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Spectral',
			'category'	=> 'serif',
			'variants' 	=> array( '400', '500', '600', '700', '800' ),
		),
		array(
			'family' 	=> 'Taviraj',
			'category'	=> 'serif',
			'variants' 	=> array( '400', '500', '600', '700', '800', '900' ),
		),
		array(
			'family' 	=> 'Tinos',
			'category'	=> 'serif',
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Titillium Web',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '600', '700', '900' ),
		),
		array(
			'family' 	=> 'Ubuntu',
			'category'	=> 'sans-serif',
			'variants' 	=> array( '400', '500', '700' ),
		),
		array(
			'family' 	=> 'Ubuntu Mono',
			'category'	=> 'monospace',
			'variants' 	=> array( '400', '700' ),
		),
		array(
			'family' 	=> 'Vollkorn',
			'category'	=> 'serif',
			'variants' 	=> array( '400', '600', '700', '900' ),
		),
		array(
			'family' 	=> 'Work Sans',
			'category'	=> 'sans-serif',
			'bodyText' 	=> false,
			'variants' 	=> array( '400', '500', '600', '700', '800', '900' ),
		),
	);

	return apply_filters( 'twentig_fonts', $fonts );
}

/**
 * Returns font weight choices.
 */
function twentig_get_font_styles() {
	
	$list_font_weights = array(
		'' 		=> __( 'Default', 'twentig' ),
		'300'	=> __( 'Light 300', 'twentig' ),
		'400'	=> __( 'Regular 400', 'twentig' ),
		'500'	=> __( 'Medium 500', 'twentig' ),
		'600'	=> __( 'Semi-Bold 600', 'twentig' ),
		'700'	=> __( 'Bold 700', 'twentig' ),
		'800'	=> __( 'Extra-Bold 800', 'twentig' ),
		'900'	=> __( 'Black 900', 'twentig' ),
	);
	return $list_font_weights;
}

/**
 * Returns default body font size. Back compat for early versions.
 */
function twentig_get_default_body_font_size() {
	if ( 'sans-serif' == get_theme_mod( 'twentig_body_font' ) && '' == get_theme_mod( 'twentig_body_font_size' ) ) {	
		return 'medium';
	} 
	return 'large';
}

```
