WordPress Theme Review team release the Webfonts Loader to download the web fonts like Google fonts and host them locally.
We are going to see:
Why to download CDN fonts?
According to current WordPress Theme review guidelines themes prohibit the use of CDNs to load assets due to privacy/tracking concerns.
The only exception to that rule is Google Fonts.
To avoid the CDN links like Google fonts we can now use the function wptt_get_webfont_styles() to load the webfonts fonts.
NOTE: It works for any web font including Google Fonts. Here, I’m showing the demo for Google fonts.
How do we load the Google fonts in WordPress?
// Load theme CORE css.
wp_enqueue_style( 'my-theme', get_stylesheet_directory_uri() . '/style.css', array(), '1.0', 'all' );
// Load fonts from Google.
wp_enqueue_style( 'my-theme-google-fonts', 'https://fonts.googleapis.com/css?family=Open+Sans&400,400i,600,700,800,900&subset=latin,latin-ext', array(), null );
OR
// Load theme CORE css.
wp_enqueue_style( 'my-theme', get_stylesheet_directory_uri() . '/style.css', array(), '1.0', 'all' );
// Load fonts from Google.
wp_enqueue_style( 'my-theme-google-fonts', my_theme_google_fonts_url(), array(), null );
// Genereate and return the Google fonts url.
function my_theme_google_fonts_url() {
$fonts_url = '';
$font_families = array(
'Open Sans:400,400i,600,700,800,900',
);
$query_args = array(
'family' => urlencode( implode( '|', $font_families ) ),
'subset' => urlencode( 'latin,latin-ext' ),
);
$fonts_url = add_query_arg( $query_args, "//fonts.googleapis.com/css" );
return $fonts_url;
}
Both work the same.
But, When I check it with Google Page Speed Insights then I found that it is a render-blocking asset that affects performance.
So, What to do?
We can download the fonts from Google and host them on our website.
It’s pretty simple with a webfont-loader PHP class.
Below is the screenshot of my performance before using the webfont-loader.

How to use the wptt_get_webfont_styles() function?
Same as the typical example we can load the web fonts as below:
// Load theme CORE css.
wp_enqueue_style( 'my-theme', get_stylesheet_directory_uri() . '/style.css', array(), '1.0', 'all' );
// Load fonts from Google.
wp_enqueue_style( 'my-theme-google-fonts', wptt_get_webfont_styles('https://fonts.googleapis.com/css?family=Open+Sans&400,400i,600,700,800,900&subset=latin,latin-ext'), array(), null );
OR
Add the web-fonts with wp_add_inline_style() to load them inline.
// Load theme CORE css.
wp_enqueue_style( 'my-theme', get_stylesheet_directory_uri() . '/style.css', array(), '1.0', 'all' );
// Load fonts from Google.
wp_add_inline_style( 'my-theme-google-fonts', wptt_get_webfont_url('https://fonts.googleapis.com/css?family=Open+Sans&400,400i,600,700,800,900&subset=latin,latin-ext') );
You can use any one of them as you want.
For more details visit https://github.com/WPTT/webfont-loader/
After using the webfont-loader performance improved:

Does it fix the Google Page Speed inside render-blocking asset error?
Yes. See the below comparison:
- Before – 1.5kb / 780ms blocking
- After – 0 blocking for Google Fonts request it means we have 1.5kb size + 780 ms blocking time


NOTE: In the screenshot, we see the 600ms blocking time which is the jQuery. We optimize the time for the Google Fonts only.