OMGF | GDPR/DSVGO Compliant, Faster Google Fonts. Easy. - Version 4.5.11

Version Description

| November 17th, 2021 = * Doc: Updated links to fancy new documentation hub: docs.ffw.press * Dev: Added $font_family to omgf_alternate_api_url filter. * Dev: Added filter to detect_registered_stylesheets(). * Fix: disable preload/unload when opposite checkbox is checked. * Fix: Updated RSS feed URL and properly encode retrieved XML to prevent parse error simplexml_load_string(). * Promo: Added force font-display promo material.

Download this release

Release Info

Developer DaanvandenBergh
Plugin Icon 128x128 OMGF | GDPR/DSVGO Compliant, Faster Google Fonts. Easy.
Version 4.5.11
Comparing to
See all releases

Code changes from version 4.5.10 to 4.5.11

assets/js/omgf-admin.js CHANGED
@@ -227,7 +227,7 @@ jQuery(document).ready(function ($) {
227
  */
228
  toggle: function (elem, option) {
229
  var this_option = $(elem);
230
- var other_option = $('.' + option + '-' + this_option.data('handle') + '-' + this_option.data('font-id') + '-' + this_option.val() + ' .' + option);
231
 
232
  if (elem.checked) {
233
  other_option.attr('disabled', true);
227
  */
228
  toggle: function (elem, option) {
229
  var this_option = $(elem);
230
+ var other_option = $('.' + option + '-' + this_option.data('font-id') + '-' + this_option.val() + ' .' + option);
231
 
232
  if (elem.checked) {
233
  other_option.attr('disabled', true);
host-webfonts-local.php CHANGED
@@ -4,7 +4,7 @@
4
  * Plugin Name: OMGF
5
  * Plugin URI: https://daan.dev/wordpress-plugins/host-google-fonts-locally
6
  * Description: Minimize DNS requests, leverage browser cache and speed up WordPress by saving Google Fonts to your server and removing external Google Fonts requests.
7
- * Version: 4.5.10
8
  * Author: Daan from FFW.Press
9
  * Author URI: https://ffw.press
10
  * License: GPL2v2 or later
@@ -19,7 +19,7 @@ defined('ABSPATH') || exit;
19
  define('OMGF_PLUGIN_DIR', plugin_dir_path(__FILE__));
20
  define('OMGF_PLUGIN_FILE', __FILE__);
21
  define('OMGF_PLUGIN_BASENAME', plugin_basename(OMGF_PLUGIN_FILE));
22
- define('OMGF_STATIC_VERSION', '4.5.7');
23
  define('OMGF_DB_VERSION', '4.5.1');
24
 
25
  /**
4
  * Plugin Name: OMGF
5
  * Plugin URI: https://daan.dev/wordpress-plugins/host-google-fonts-locally
6
  * Description: Minimize DNS requests, leverage browser cache and speed up WordPress by saving Google Fonts to your server and removing external Google Fonts requests.
7
+ * Version: 4.5.11
8
  * Author: Daan from FFW.Press
9
  * Author URI: https://ffw.press
10
  * License: GPL2v2 or later
19
  define('OMGF_PLUGIN_DIR', plugin_dir_path(__FILE__));
20
  define('OMGF_PLUGIN_FILE', __FILE__);
21
  define('OMGF_PLUGIN_BASENAME', plugin_basename(OMGF_PLUGIN_FILE));
22
+ define('OMGF_STATIC_VERSION', '4.5.11');
23
  define('OMGF_DB_VERSION', '4.5.1');
24
 
25
  /**
includes/admin/class-settings.php CHANGED
@@ -194,7 +194,7 @@ class OMGF_Admin_Settings extends OMGF_Admin
194
  }
195
 
196
  // Footer Text
197
- add_filter('admin_footer_text', [$this, 'footer_text_left']);
198
  add_filter('update_footer', [$this, 'footer_text_right'], 11);
199
 
200
  // Tabs
@@ -479,7 +479,7 @@ class OMGF_Admin_Settings extends OMGF_Admin
479
  $xml = get_transient(self::OMGF_NEWS_REEL);
480
 
481
  if (!$xml) {
482
- $response = wp_remote_get('https://daan.dev/tag/omgf/feed');
483
 
484
  if (!is_wp_error($response)) {
485
  $xml = wp_remote_retrieve_body($response);
@@ -493,6 +493,10 @@ class OMGF_Admin_Settings extends OMGF_Admin
493
  return $text;
494
  }
495
 
 
 
 
 
496
  $xml = simplexml_load_string($xml);
497
 
498
  if (!$xml) {
194
  }
195
 
196
  // Footer Text
197
+ add_filter('admin_footer_text', [$this, 'footer_text_left'], 99);
198
  add_filter('update_footer', [$this, 'footer_text_right'], 11);
199
 
200
  // Tabs
479
  $xml = get_transient(self::OMGF_NEWS_REEL);
480
 
481
  if (!$xml) {
482
+ $response = wp_remote_get('https://ffw.press/blog/tag/omgf/feed');
483
 
484
  if (!is_wp_error($response)) {
485
  $xml = wp_remote_retrieve_body($response);
493
  return $text;
494
  }
495
 
496
+ /**
497
+ * Make sure the XML is properly encoded.
498
+ */
499
+ $xml = utf8_encode(html_entity_decode($xml));
500
  $xml = simplexml_load_string($xml);
501
 
502
  if (!$xml) {
includes/admin/settings/class-help.php CHANGED
@@ -50,11 +50,11 @@ class OMGF_Admin_Settings_Help extends OMGF_Admin_Settings_Builder
50
  <?php _e('Need Help?', $this->plugin_text_domain); ?>
51
  </h3>
52
  <ul>
53
- <li><a class="welcome-icon dashicons-controls-forward" target="_blank" href="<?= apply_filters('omgf_settings_sidebar_quick_start', 'https://ffw.press/docs/omgf-pro/quick-start/'); ?>"><?= __('Quick Start Guide', $this->plugin_text_domain); ?></a></li>
54
- <li><a class="welcome-icon dashicons-text-page" target="_blank" href="<?= apply_filters('omgf_settings_sidebar_user_manual', 'https://ffw.press/docs/omgf-pro/user-manual/'); ?>"><?= __('User Manual', $this->plugin_text_domain); ?></a></li>
55
- <li><a class="welcome-icon dashicons-editor-help" target="_blank" href="<?= apply_filters('omgf_settings_sidebar_faq_link', 'https://wordpress.org/plugins/host-webfonts-local/#description'); ?>"><?= __('FAQ', $this->plugin_text_domain); ?></a></li>
56
- <li><a class="welcome-icon dashicons-sos" target="_blank" href="<?= apply_filters('omgf_settings_sidebar_troubleshooting_link', 'https://ffw.press/docs/omgf-pro/troubleshooting/'); ?>"><?= __('Troubleshooting Guide', $this->plugin_text_domain); ?></a></li>
57
- <li><a class="welcome-icon dashicons-email" target="_blank" href="<?= apply_filters('omgf_settings_sidebar_get_support_link', 'https://wordpress.org/support/plugin/host-webfonts-local/#new-post'); ?>"><?= __('Get Support', $this->plugin_text_domain); ?></a></li>
58
  </ul>
59
  </div>
60
  <div class="welcome-panel-column">
50
  <?php _e('Need Help?', $this->plugin_text_domain); ?>
51
  </h3>
52
  <ul>
53
+ <li><a class="welcome-icon dashicons-controls-forward" target="_blank" href="<?= apply_filters('omgf_settings_help_quick_start', 'https://docs.ffw.press/article/7-quick-start'); ?>"><?= __('Quick Start Guide', $this->plugin_text_domain); ?></a></li>
54
+ <li><a class="welcome-icon dashicons-text-page" target="_blank" href="<?= apply_filters('omgf_settings_help_user_manual', 'https://docs.ffw.press/category/4-omgf-pro'); ?>"><?= __('User Manual', $this->plugin_text_domain); ?></a></li>
55
+ <li><a class="welcome-icon dashicons-editor-help" target="_blank" href="<?= apply_filters('omgf_settings_help_faq_link', 'https://docs.ffw.press/article/9-frequently-asked-question-faq'); ?>"><?= __('FAQ', $this->plugin_text_domain); ?></a></li>
56
+ <li><a class="welcome-icon dashicons-sos" target="_blank" href="<?= apply_filters('omgf_settings_help_troubleshooting_link', 'https://docs.ffw.press/category/37-omgf-pro---troubleshooting'); ?>"><?= __('Troubleshooting Guide', $this->plugin_text_domain); ?></a></li>
57
+ <li><a class="welcome-icon dashicons-email" target="_blank" href="<?= apply_filters('omgf_settings_help_support_link', 'https://docs.ffw.press/contact'); ?>"><?= __('Get Support', $this->plugin_text_domain); ?></a></li>
58
  </ul>
59
  </div>
60
  <div class="welcome-panel-column">
includes/admin/settings/class-optimize.php CHANGED
@@ -39,8 +39,9 @@ class OMGF_Admin_Settings_Optimize extends OMGF_Admin_Settings_Builder
39
  add_filter('omgf_optimize_settings_content', [$this, 'do_optimization_mode'], 30);
40
  add_filter('omgf_optimize_settings_content', [$this, 'do_promo_combine_requests'], 40);
41
  add_filter('omgf_optimize_settings_content', [$this, 'do_display_option'], 50);
42
- add_filter('omgf_optimize_settings_content', [$this, 'do_promo_include_file_types'], 60);
43
- add_filter('omgf_optimize_settings_content', [$this, 'do_promo_force_subsets'], 70);
 
44
  add_filter('omgf_optimize_settings_content', [$this, 'do_after'], 100);
45
 
46
  add_filter('omgf_optimize_settings_content', [$this, 'do_optimize_fonts_container'], 200);
@@ -110,6 +111,20 @@ class OMGF_Admin_Settings_Optimize extends OMGF_Admin_Settings_Builder
110
  );
111
  }
112
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
113
  /**
114
  * Display WOFF2 Only
115
  *
39
  add_filter('omgf_optimize_settings_content', [$this, 'do_optimization_mode'], 30);
40
  add_filter('omgf_optimize_settings_content', [$this, 'do_promo_combine_requests'], 40);
41
  add_filter('omgf_optimize_settings_content', [$this, 'do_display_option'], 50);
42
+ add_filter('omgf_optimize_settings_content', [$this, 'do_promo_force_font_display'], 60);
43
+ add_filter('omgf_optimize_settings_content', [$this, 'do_promo_include_file_types'], 70);
44
+ add_filter('omgf_optimize_settings_content', [$this, 'do_promo_force_subsets'], 80);
45
  add_filter('omgf_optimize_settings_content', [$this, 'do_after'], 100);
46
 
47
  add_filter('omgf_optimize_settings_content', [$this, 'do_optimize_fonts_container'], 200);
111
  );
112
  }
113
 
114
+ /**
115
+ * Force Font-Display Option Site Wide
116
+ */
117
+ public function do_promo_force_font_display()
118
+ {
119
+ $this->do_checkbox(
120
+ __('Force Font-Display Option Site Wide (Pro)', $this->plugin_text_domain),
121
+ 'omgf_pro_force_font_display',
122
+ defined('OMGF_PRO_FORCE_FONT_DISPLAY') ? OMGF_PRO_FORCE_FONT_DISPLAY : false,
123
+ __('Force the above <code>font-display</code> attribute on all <code>@font-face</code> statements to ensure all text is user-visible while webfonts and icon sets are loading.', $this->plugin_text_domain),
124
+ true
125
+ );
126
+ }
127
+
128
  /**
129
  * Display WOFF2 Only
130
  *
includes/api/class-download.php CHANGED
@@ -269,13 +269,13 @@ class OMGF_API_Download extends WP_REST_Controller
269
  $alternate_fonts = apply_filters('omgf_alternate_fonts', []);
270
 
271
  if (in_array($family, array_keys($alternate_fonts))) {
272
- $url = apply_filters('omgf_alternate_api_url', $url);
273
  unset($query);
274
  }
275
 
276
  $query_string = '';
277
 
278
- if ($query) {
279
  $query_string = '?' . http_build_query($query);
280
  }
281
 
@@ -332,8 +332,6 @@ class OMGF_API_Download extends WP_REST_Controller
332
  * Because the regular Google Webfonts Helper API tends to go offline sometimes, this function allows us
333
  * to use fallback services.
334
  *
335
- * TODO: Setup own mirror.
336
- *
337
  * @return string Will return regular API url if fallback API url fails, too. Error handling later on will display a
338
  * proper message to the user.
339
  */
269
  $alternate_fonts = apply_filters('omgf_alternate_fonts', []);
270
 
271
  if (in_array($family, array_keys($alternate_fonts))) {
272
+ $url = apply_filters('omgf_alternate_api_url', $url, $family);
273
  unset($query);
274
  }
275
 
276
  $query_string = '';
277
 
278
+ if (isset($query)) {
279
  $query_string = '?' . http_build_query($query);
280
  }
281
 
332
  * Because the regular Google Webfonts Helper API tends to go offline sometimes, this function allows us
333
  * to use fallback services.
334
  *
 
 
335
  * @return string Will return regular API url if fallback API url fails, too. Error handling later on will display a
336
  * proper message to the user.
337
  */
includes/class-download.php CHANGED
@@ -18,14 +18,21 @@ defined('ABSPATH') || exit;
18
 
19
  class OMGF_Download
20
  {
 
21
  private $url;
22
 
 
23
  private $filename;
24
 
 
25
  private $extension;
26
 
 
27
  private $path;
28
 
 
 
 
29
  /**
30
  * OMGF_Download constructor.
31
  */
@@ -65,6 +72,15 @@ class OMGF_Download
65
  }
66
 
67
  $tmp = download_url($this->url);
 
 
 
 
 
 
 
 
 
68
  copy($tmp, $file);
69
  @unlink($tmp);
70
 
18
 
19
  class OMGF_Download
20
  {
21
+ /** @var string $url */
22
  private $url;
23
 
24
+ /** @var string $filename */
25
  private $filename;
26
 
27
+ /** @var string $extension */
28
  private $extension;
29
 
30
+ /** @var string $path */
31
  private $path;
32
 
33
+ /** @var string $plugin_text_domain */
34
+ private $plugin_text_domain = 'host-webfonts-local';
35
+
36
  /**
37
  * OMGF_Download constructor.
38
  */
72
  }
73
 
74
  $tmp = download_url($this->url);
75
+
76
+ if (is_wp_error($tmp)) {
77
+ /** @var WP_Error $tmp */
78
+ OMGF_Admin_Notice::set_notice(__('OMGF encountered an error while downloading fonts', $this->plugin_text_domain) . ': ' . $tmp->get_error_message(), 'omgf-download-failed', false, 'error', $tmp->get_error_code());
79
+
80
+ return '';
81
+ }
82
+
83
+ /** @var string $tmp */
84
  copy($tmp, $file);
85
  @unlink($tmp);
86
 
includes/frontend/class-functions.php CHANGED
@@ -176,6 +176,9 @@ class OMGF_Frontend_Functions
176
 
177
  $cached_file = OMGF_CACHE_PATH . '/' . $updated_handle . "/$updated_handle.css";
178
 
 
 
 
179
  if (file_exists(WP_CONTENT_DIR . $cached_file)) {
180
  $wp_styles->registered[$handle]->src = content_url($cached_file);
181
 
@@ -225,11 +228,16 @@ class OMGF_Frontend_Functions
225
  */
226
  private function detect_registered_stylesheets($registered_styles)
227
  {
228
- return array_filter(
229
  $registered_styles,
230
  function ($contents) {
231
  return strpos($contents->src, 'fonts.googleapis.com/css') !== false;
232
  }
233
  );
 
 
 
 
 
234
  }
235
  }
176
 
177
  $cached_file = OMGF_CACHE_PATH . '/' . $updated_handle . "/$updated_handle.css";
178
 
179
+ /**
180
+ * Bail early if stylesheet already exists.
181
+ */
182
  if (file_exists(WP_CONTENT_DIR . $cached_file)) {
183
  $wp_styles->registered[$handle]->src = content_url($cached_file);
184
 
228
  */
229
  private function detect_registered_stylesheets($registered_styles)
230
  {
231
+ $detected_stylesheets = array_filter(
232
  $registered_styles,
233
  function ($contents) {
234
  return strpos($contents->src, 'fonts.googleapis.com/css') !== false;
235
  }
236
  );
237
+
238
+ /**
239
+ * @since v4.5.11 Added filter to allow adding additional stylesheets.
240
+ */
241
+ return apply_filters('omgf_detected_registered_stylesheets', $detected_stylesheets, $registered_styles);
242
  }
243
  }
includes/optimization-mode/class-manual.php CHANGED
@@ -202,7 +202,7 @@ class OMGF_OptimizationMode_Manual
202
  */
203
  private function no_urls_found()
204
  {
205
- add_settings_error('general', 'omgf_no_urls_found', sprintf(__('No (additional) Google Fonts found to optimize. If you believe this is an error, please refer to the %stroubleshooting%s section of the documentation for possible solutions.', $this->plugin_text_domain), '<a href="https://ffw.press/docs/omgf-pro/troubleshooting">', '</a>'), 'info');
206
  }
207
 
208
  /**
202
  */
203
  private function no_urls_found()
204
  {
205
+ add_settings_error('general', 'omgf_no_urls_found', sprintf(__('No (additional) Google Fonts found to optimize. If you believe this is an error, please refer to the %stroubleshooting%s section of the documentation for possible solutions.', $this->plugin_text_domain), '<a href="https://docs.ffw.press/category/37-omgf-pro---troubleshooting">', '</a>'), 'info');
206
  }
207
 
208
  /**
readme.md CHANGED
@@ -33,8 +33,10 @@ Everything in the free version, plus:
33
  - Automatically remove/replace all Google Fonts throughout the entire document/page,
34
  - Also supports WebFont Loader (webfont.js), Early Access Google Fonts and requests in stylesheets using @import and @font-face statements.
35
  - Automatically generate different stylesheets for pages with different Google Fonts configurations.
 
36
  - Combine all Google Fonts stylesheets (requested by your theme and/or plugins) into one file,
37
  - Deduplicate Google Fonts stylesheets,
 
38
  - Define file types to include in stylesheet (WOFF, WOFF2, EOT, TTF, SVG),
39
  - Reduce loading time and page size, by forcing the used subset(s) for all Google Fonts requests,
40
  - Remove Resource Hints (preload, preconnect, dns-prefetch) pointing to fonts.googleapis.com or fonts.gstatic.com,
@@ -44,7 +46,7 @@ Everything in the free version, plus:
44
  - Anything you like!
45
  - Proper handling for AMP pages (Fallback to or remove Google Fonts).
46
 
47
- **[Documentation](https://ffw.press/docs/omgf-pro/) | [Purchase OMGF Pro](https://ffw.press/wordpress/omgf-pro/)**
48
 
49
 
50
  ## Installation
33
  - Automatically remove/replace all Google Fonts throughout the entire document/page,
34
  - Also supports WebFont Loader (webfont.js), Early Access Google Fonts and requests in stylesheets using @import and @font-face statements.
35
  - Automatically generate different stylesheets for pages with different Google Fonts configurations.
36
+ - Material Icons support.
37
  - Combine all Google Fonts stylesheets (requested by your theme and/or plugins) into one file,
38
  - Deduplicate Google Fonts stylesheets,
39
+ - Rewrite stylesheets added by other plugins and/or themes to include the configured font-display (e.g. swap) option, this will remove *the ensure text remains visible during webfont load* optimization suggestion from Google PageSpeed Insights,
40
  - Define file types to include in stylesheet (WOFF, WOFF2, EOT, TTF, SVG),
41
  - Reduce loading time and page size, by forcing the used subset(s) for all Google Fonts requests,
42
  - Remove Resource Hints (preload, preconnect, dns-prefetch) pointing to fonts.googleapis.com or fonts.gstatic.com,
46
  - Anything you like!
47
  - Proper handling for AMP pages (Fallback to or remove Google Fonts).
48
 
49
+ **[Documentation](https://docs.ffw.press/category/4-omgf-pro/) | [Purchase OMGF Pro](https://ffw.press/wordpress/omgf-pro/)**
50
 
51
 
52
  ## Installation
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: DaanvandenBergh
3
  Tags: google, fonts, gdpr, cache, speed, preload, font-display, webfonts, subsets, remove, minimize, external, requests
4
  Requires at least: 4.6
5
  Tested up to: 5.8
6
- Stable tag: 4.5.10
7
  Requires PHP: 7.0
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -47,10 +47,12 @@ Everything in the free version, plus:
47
  - Automatically remove/replace all Google Fonts throughout the entire document/page,
48
  - Also supports WebFont Loader (webfont.js), Early Access Google Fonts and requests in stylesheets using @import and @font-face statements.
49
  - Automatically generate different stylesheets for pages with different Google Fonts configurations.
 
50
  - Combine all Google Fonts stylesheets (requested by your theme and/or plugins) into one file,
51
  - Deduplicate Google Fonts stylesheets,
 
52
  - Define file types to include in stylesheet (WOFF, WOFF2, EOT, TTF, SVG),
53
- - Reduce loading time and page size, by forcing the used subset(s) for all Google Fonts requests,
54
  - Remove Resource Hints (preload, preconnect, dns-prefetch) pointing to fonts.googleapis.com or fonts.gstatic.com,
55
  - Modify `src` attribute for fonts in stylesheet using the Fonts Source URL option to fully integrate with your configuration,
56
  - Use this to serve fonts and the stylesheets from your CDN, or
@@ -58,7 +60,7 @@ Everything in the free version, plus:
58
  - Anything you like!
59
  - Proper handling for AMP pages (Fallback to or remove Google Fonts).
60
 
61
- *[Purchase OMGF Pro](https://ffw.press/wordpress/omgf-pro/) | [Documentation](https://ffw.press/docs/omgf-pro/) | [Tested Plugins & Themes](https://ffw.press/docs/omgf-pro/troubleshooting/compatibility/)*
62
 
63
  == Installation ==
64
 
@@ -66,11 +68,11 @@ Everything in the free version, plus:
66
  2. Activate the plugin through the 'Plugins' screen in WordPress
67
  3. Use the Settings -> Optimize Google Fonts screen to configure the plugin
68
 
69
- For a more comprehensive guide on configuring OMGF, check out the [user manual](https://ffw.press/docs/omgf-pro/user-manual/)
70
 
71
  == Frequently Asked Questions ==
72
 
73
- For the FAQ, [click here](https://ffw.press/docs/omgf-pro/faq/).
74
 
75
  == Screenshots ==
76
 
@@ -81,6 +83,14 @@ For the FAQ, [click here](https://ffw.press/docs/omgf-pro/faq/).
81
 
82
  == Changelog ==
83
 
 
 
 
 
 
 
 
 
84
  = 4.5.10 | October 18th, 2021 =
85
  * Enhancement: API now cleans up excessive spacing and + symbols in requests before fetching fonts. This comes in handy when e.g. @import statements in CSS stylesheets are auto-formatted by IDEs.
86
  * Fix: API would crash when Google Fonts request turned up empty.
3
  Tags: google, fonts, gdpr, cache, speed, preload, font-display, webfonts, subsets, remove, minimize, external, requests
4
  Requires at least: 4.6
5
  Tested up to: 5.8
6
+ Stable tag: 4.5.11
7
  Requires PHP: 7.0
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
47
  - Automatically remove/replace all Google Fonts throughout the entire document/page,
48
  - Also supports WebFont Loader (webfont.js), Early Access Google Fonts and requests in stylesheets using @import and @font-face statements.
49
  - Automatically generate different stylesheets for pages with different Google Fonts configurations.
50
+ - Material Icons support.
51
  - Combine all Google Fonts stylesheets (requested by your theme and/or plugins) into one file,
52
  - Deduplicate Google Fonts stylesheets,
53
+ - Rewrite stylesheets added by other plugins and/or themes to include the configured font-display (e.g. swap) option, this will remove *the ensure text remains visible during webfont load* optimization suggestion from Google PageSpeed Insights.
54
  - Define file types to include in stylesheet (WOFF, WOFF2, EOT, TTF, SVG),
55
+ - Reduce loading time and page size, by forcing a certain subset(s) to be used for all Google Fonts requests,
56
  - Remove Resource Hints (preload, preconnect, dns-prefetch) pointing to fonts.googleapis.com or fonts.gstatic.com,
57
  - Modify `src` attribute for fonts in stylesheet using the Fonts Source URL option to fully integrate with your configuration,
58
  - Use this to serve fonts and the stylesheets from your CDN, or
60
  - Anything you like!
61
  - Proper handling for AMP pages (Fallback to or remove Google Fonts).
62
 
63
+ *[Purchase OMGF Pro](https://ffw.press/wordpress/omgf-pro/) | [Documentation](https://docs.ffw.press/category/4-omgf-pro/) | [Tested Plugins & Themes](https://docs.ffw.press/article/40-list-of-compatible-themes-and-plugins-omgf-pro)*
64
 
65
  == Installation ==
66
 
68
  2. Activate the plugin through the 'Plugins' screen in WordPress
69
  3. Use the Settings -> Optimize Google Fonts screen to configure the plugin
70
 
71
+ For a more comprehensive guide on configuring OMGF, check out the [user manual](https://docs.ffw.press/category/4-omgf-pro/)
72
 
73
  == Frequently Asked Questions ==
74
 
75
+ For the FAQ, [click here](https://docs.ffw.press/category/76-omgf-pro---faq).
76
 
77
  == Screenshots ==
78
 
83
 
84
  == Changelog ==
85
 
86
+ = 4.5.11 | November 17th, 2021 =
87
+ * Doc: Updated links to fancy new documentation hub: docs.ffw.press
88
+ * Dev: Added $font_family to omgf_alternate_api_url filter.
89
+ * Dev: Added filter to detect_registered_stylesheets().
90
+ * Fix: disable preload/unload when opposite checkbox is checked.
91
+ * Fix: Updated RSS feed URL and properly encode retrieved XML to prevent parse error simplexml_load_string().
92
+ * Promo: Added force font-display promo material.
93
+
94
  = 4.5.10 | October 18th, 2021 =
95
  * Enhancement: API now cleans up excessive spacing and + symbols in requests before fetching fonts. This comes in handy when e.g. @import statements in CSS stylesheets are auto-formatted by IDEs.
96
  * Fix: API would crash when Google Fonts request turned up empty.