(array) $variants, ); } } /** * Get Fonts */ static public function get_fonts() { do_action( 'bstone_get_fonts' ); return apply_filters( 'bstone_add_fonts', self::$fonts ); } /** * Renders the tag for all fonts in the $fonts array. * * @since 1.0.1 Added the filter 'bstone_render_fonts' to support custom fonts. * @since 1.0.0 * @return void */ static public function render_fonts() { $font_list = apply_filters( 'bstone_render_fonts', self::get_fonts() ); $google_fonts = array(); $font_subset = array(); $system_fonts = Bstone_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( 'bstone_font_subset', '', $name ); if ( ! empty( $subset ) ) { $font_subset[] = $subset; } //var_dump($google_fonts[ $name ]); } } $google_font_url = self::google_fonts_url( $google_fonts, $font_subset ); wp_enqueue_style( 'bstone-google-fonts', $google_font_url, array(), BSTONE_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 */ static public function google_fonts_url( $fonts, $subsets = array() ) { /* URL */ $base_url = '//fonts.googleapis.com/css'; $font_args = array(); $family = array(); $fonts = apply_filters( 'bstone_google_fonts', $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 ); } $family[] = trim( $font_name . ':' . urlencode( 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'] = urlencode( trim( $subsets ) ); } return add_query_arg( $font_args, $base_url ); } return ''; } } // End Bstone Fonts /** * Font info class for System and Google fonts. */ if ( ! class_exists( 'Bstone_Font_Families' ) ) : /** * Font info class for System and Google fonts. */ final class Bstone_Font_Families { /** * System Fonts * * @since 1.0.1 * @var array */ public static $system_fonts = array(); /** * Google Fonts * * @since 1.0.1 * @var array */ public static $google_fonts = array(); /** * Get System Fonts * * @since 1.0.1 * * @return Array All the system fonts in Bstone */ public static function get_system_fonts() { if ( empty( self::$system_fonts ) ) { self::$system_fonts = array( 'Helvetica' => array( 'fallback' => 'Verdana, Arial, sans-serif', 'weights' => array( '300', '400', '700', ), ), 'Verdana' => array( 'fallback' => 'Helvetica, Arial, sans-serif', 'weights' => array( '300', '400', '700', ), ), 'Arial' => array( 'fallback' => 'Helvetica, Verdana, sans-serif', 'weights' => array( '300', '400', '700', ), ), 'Times' => array( 'fallback' => 'Georgia, serif', 'weights' => array( '300', '400', '700', ), ), 'Georgia' => array( 'fallback' => 'Times, serif', 'weights' => array( '300', '400', '700', ), ), 'Courier' => array( 'fallback' => 'monospace', 'weights' => array( '300', '400', '700', ), ), ); } return apply_filters( 'bstone_system_fonts', self::$system_fonts ); } /** * Custom Fonts * * @since 1.0.1 * * @return Array All the custom fonts in Bstone */ public static function get_custom_fonts() { $custom_fonts = array(); return apply_filters( 'bstone_custom_fonts', $custom_fonts ); } /** * Google Fonts used in bstone. * Array is generated from the google-fonts.json file. * * @since 1.0.1 * * @return Array Array of Google Fonts. */ public static function get_google_fonts() { if ( empty( self::$google_fonts ) ) { $google_fonts_file = apply_filters( 'bstone_google_fonts_json_file', BSTONE_THEME_DIR . 'assets/google-fonts.json' ); if ( ! file_exists( BSTONE_THEME_DIR . 'assets/google-fonts.json' ) ) { return array(); } global $wp_filesystem; if ( empty( $wp_filesystem ) ) { require_once( ABSPATH . '/wp-admin/includes/file.php' ); WP_Filesystem(); } $file_contants = $wp_filesystem->get_contents( $google_fonts_file ); $google_fonts_json = json_decode( $file_contants, 1 ); foreach ( $google_fonts_json as $key => $font ) { $name = key( $font ); foreach ( $font[ $name ] as $font_key => $variant ) { if ( stristr( $variant, 'italic' ) ) { unset( $font[ $name ][ $font_key ] ); } if ( 'regular' == $variant ) { $font[ $name ][ $font_key ] = '400'; } self::$google_fonts[ $name ] = array_values( $font[ $name ] ); } } } return apply_filters( 'bstone_google_fonts', self::$google_fonts ); } } endif; /** * Font info class for System and Google fonts. */ if ( ! class_exists( 'Bstone_Fonts_Data' ) ) : /** * Fonts Data */ final class Bstone_Fonts_Data { /** * Localize Fonts */ static public function js() { $system = json_encode( Bstone_Font_Families::get_system_fonts() ); $google = json_encode( Bstone_Font_Families::get_google_fonts() ); $custom = json_encode( Bstone_Font_Families::get_custom_fonts() ); if ( ! empty( $custom ) ) { return 'var AstFontFamilies = { system: ' . $system . ', custom: ' . $custom . ', google: ' . $google . ' };'; } else { return 'var AstFontFamilies = { system: ' . $system . ', google: ' . $google . ' };'; } } } endif;