(array) $variants, ); } } /** * Get Fonts */ public static function get_fonts() { do_action( 'astra_get_fonts' ); return apply_filters( 'astra_add_fonts', self::$fonts ); } /** * Renders the tag for all fonts in the $fonts array. * * @since 1.0.16 Added the filter 'astra_render_fonts' to support custom fonts. * @since 1.0.0 * @return void */ public static function render_fonts() { $font_list = apply_filters( 'astra_render_fonts', self::get_fonts() ); $google_fonts = array(); $font_subset = array(); $system_fonts = Astra_Font_Families::get_system_fonts(); foreach ( $font_list as $name => $font ) { if ( ! empty( $name ) && ! isset( $system_fonts[ $name ] ) ) { // Add font variants. $google_fonts[ $name ] = $font['variants']; // Add Subset. $subset = apply_filters( 'astra_font_subset', '', $name ); if ( ! empty( $subset ) ) { $font_subset[] = $subset; } } } $google_font_url = self::google_fonts_url( $google_fonts, $font_subset ); // Do not load Google font remote or local font asset if not any font selected. if ( '' === $google_font_url ) { return; } /** * Support self hosted Google Fonts. * * @since 3.6.0 */ if ( Astra_API_Init::get_admin_settings_option( 'self_hosted_gfonts', false ) && ! is_customize_preview() && ! is_admin() ) { if ( Astra_API_Init::get_admin_settings_option( 'preload_local_fonts', false ) ) { astra_load_preload_local_fonts( $google_font_url ); } wp_enqueue_style( 'astra-google-fonts', astra_get_webfont_url( $google_font_url ), array(), ASTRA_THEME_VERSION, 'all' ); } else { wp_enqueue_style( 'astra-google-fonts', $google_font_url, array(), ASTRA_THEME_VERSION, 'all' ); } } /** * Google Font URL * Combine multiple google font in one URL * * @link https://shellcreeper.com/?p=1476 * @param array $fonts Google Fonts array. * @param array $subsets Font's Subsets array. * * @return string */ public static function google_fonts_url( $fonts, $subsets = array() ) { /* URL */ $base_url = 'https://fonts.googleapis.com/css'; $font_args = array(); $family = array(); // This is deprecated filter hook. $fonts = apply_filters( 'astra_google_fonts', $fonts ); $fonts = apply_filters( 'astra_google_fonts_selected', $fonts ); /* Format Each Font Family in Array */ foreach ( $fonts as $font_name => $font_weight ) { $font_name = str_replace( ' ', '+', $font_name ); if ( ! empty( $font_weight ) ) { if ( is_array( $font_weight ) ) { $font_weight = implode( ',', $font_weight ); } $font_family = explode( ',', $font_name ); $font_family = str_replace( "'", '', astra_get_prop( $font_family, 0 ) ); $family[] = trim( $font_family . ':' . rawurlencode( trim( $font_weight ) ) ); } else { $family[] = trim( $font_name ); } } /* Only return URL if font family defined. */ if ( ! empty( $family ) ) { /* Make Font Family a String */ $family = implode( '|', $family ); /* Add font family in args */ $font_args['family'] = $family; /* Add font subsets in args */ if ( ! empty( $subsets ) ) { /* format subsets to string */ if ( is_array( $subsets ) ) { $subsets = implode( ',', $subsets ); } $font_args['subset'] = rawurlencode( trim( $subsets ) ); } $font_args['display'] = astra_get_fonts_display_property(); return esc_url_raw( add_query_arg( $font_args, $base_url ) ); } return ''; } }