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

Version Description

  • Added: Removed Cache Directory in favor of an automatic approach to improve UX, because most people didn't change the default value anyway.
    • I.e. all files generated by OMGF are stored in a subdirectory of the Uploads folder (default wp-content/uploads), called omgf.
    • For most of you nothing will change, but omgf_upload_dir and omgf_upload_url filters are available for DEVs who want to modify the default value, although I really can't think of a reason why you'd want to do that.
  • Reworded description of Optimize for logged-in Administrators/Editors option.
Download this release

Release Info

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

Code changes from version 5.0.5 to 5.0.6

host-webfonts-local.php CHANGED
@@ -4,7 +4,7 @@
4
  * Plugin Name: OMGF
5
  * Plugin URI: https://ffw.press/wordpress/omgf/
6
  * Description: Increase GDPR compliance, reduce DNS requests and leverage browser cache by automatically downloading Google Fonts to your server.
7
- * Version: 5.0.5
8
  * Author: Daan from FFW.Press
9
  * Author URI: https://ffw.press
10
  * License: GPL2v2 or later
4
  * Plugin Name: OMGF
5
  * Plugin URI: https://ffw.press/wordpress/omgf/
6
  * Description: Increase GDPR compliance, reduce DNS requests and leverage browser cache by automatically downloading Google Fonts to your server.
7
+ * Version: 5.0.6
8
  * Author: Daan from FFW.Press
9
  * Author URI: https://ffw.press
10
  * License: GPL2v2 or later
includes/admin/class-settings.php CHANGED
@@ -131,7 +131,6 @@ class OMGF_Admin_Settings extends OMGF_Admin
131
  /**
132
  * Advanced Settings
133
  */
134
- const OMGF_ADV_SETTING_CACHE_DIR = 'omgf_cache_dir';
135
  const OMGF_ADV_SETTING_UNINSTALL = 'omgf_uninstall';
136
 
137
  /**
@@ -389,7 +388,7 @@ class OMGF_Admin_Settings extends OMGF_Admin
389
  return;
390
  }
391
  ?>
392
- <form id="<?= $field; ?>-form" name="omgf-settings-form" method="post" action="<?= admin_url('options.php?tab=' . $this->active_tab); ?>" autocomplete="off">
393
  <?php
394
  settings_fields($field);
395
  do_settings_sections($field);
131
  /**
132
  * Advanced Settings
133
  */
 
134
  const OMGF_ADV_SETTING_UNINSTALL = 'omgf_uninstall';
135
 
136
  /**
388
  return;
389
  }
390
  ?>
391
+ <form id="<?= $field; ?>-form" name="omgf-settings-form" method="post" action="<?= apply_filters('omgf_form_action', admin_url('options.php?tab=' . $this->active_tab), $this->page, $this->active_tab); ?>" autocomplete="off">
392
  <?php
393
  settings_fields($field);
394
  do_settings_sections($field);
includes/admin/settings/class-advanced.php CHANGED
@@ -50,7 +50,7 @@ class OMGF_Admin_Settings_Advanced extends OMGF_Admin_Settings_Builder
50
  <p>
51
  <?= __('If you require the downloaded/generated files to be saved in a different location or served from a different resource (e.g. a CDN) or path, use these settings to make OMGF work with your configuration.', $this->plugin_text_domain); ?>
52
  </p>
53
- <?php
54
  }
55
 
56
  /**
@@ -58,13 +58,16 @@ class OMGF_Admin_Settings_Advanced extends OMGF_Admin_Settings_Builder
58
  */
59
  public function do_cache_dir()
60
  {
61
- $this->do_text(
62
- __('Fonts Cache Directory', $this->plugin_text_domain),
63
- OMGF_Admin_Settings::OMGF_ADV_SETTING_CACHE_DIR,
64
- __('e.g. /uploads/omgf', $this->plugin_text_domain),
65
- OMGF_CACHE_DIR,
66
- __("The directory (inside <code>wp-content</code>) where font files should be stored. Give each site a unique value if you're using Multisite. Defaults to <code>/uploads/omgf</code>. After changing this setting, the directory will be created if it doesn't exist and existing files will be moved automatically.", $this->plugin_text_domain)
67
- );
 
 
 
68
  }
69
 
70
  /**
@@ -79,8 +82,8 @@ class OMGF_Admin_Settings_Advanced extends OMGF_Admin_Settings_Builder
79
  defined('OMGF_PRO_SOURCE_URL') ? OMGF_PRO_SOURCE_URL : '',
80
  sprintf(
81
  __("Modify the <code>src</code> for each font file in stylesheets generated by OMGF Pro. This can be anything; from an absolute URL pointing to your CDN (e.g. <code>%s</code>) to an alternate relative URL (e.g. <code>/renamed-wp-content-dir/alternate/path/to/font-files</code>) to work with <em>security thru obscurity</em> plugins. Enter the full path to OMGF's files. Defaults to <code>%s</code> (no trailing slash)", $this->plugin_text_domain),
82
- str_replace(home_url(), 'https://your-cdn.com', WP_CONTENT_URL . OMGF_CACHE_DIR),
83
- WP_CONTENT_URL . OMGF_CACHE_DIR
84
  ) . ' ' . $this->promo,
85
  true
86
  );
50
  <p>
51
  <?= __('If you require the downloaded/generated files to be saved in a different location or served from a different resource (e.g. a CDN) or path, use these settings to make OMGF work with your configuration.', $this->plugin_text_domain); ?>
52
  </p>
53
+ <?php
54
  }
55
 
56
  /**
58
  */
59
  public function do_cache_dir()
60
  {
61
+ ?>
62
+ <tr>
63
+ <th scope="row"><?= __('Fonts Cache Directory', $this->plugin_text_domain); ?></th>
64
+ <td>
65
+ <p class="description">
66
+ <?= sprintf(__('Downloaded stylesheets and font files %s are stored in: <code>%s</code>.', $this->plugin_text_domain), is_multisite() ? __('(for this site)', $this->plugin_text_domain) : '', str_replace(ABSPATH, '', OMGF_UPLOAD_DIR)); ?>
67
+ </p>
68
+ </td>
69
+ </tr>
70
+ <?php
71
  }
72
 
73
  /**
82
  defined('OMGF_PRO_SOURCE_URL') ? OMGF_PRO_SOURCE_URL : '',
83
  sprintf(
84
  __("Modify the <code>src</code> for each font file in stylesheets generated by OMGF Pro. This can be anything; from an absolute URL pointing to your CDN (e.g. <code>%s</code>) to an alternate relative URL (e.g. <code>/renamed-wp-content-dir/alternate/path/to/font-files</code>) to work with <em>security thru obscurity</em> plugins. Enter the full path to OMGF's files. Defaults to <code>%s</code> (no trailing slash)", $this->plugin_text_domain),
85
+ str_replace(home_url(), 'https://your-cdn.com', OMGF_UPLOAD_URL),
86
+ OMGF_UPLOAD_URL
87
  ) . ' ' . $this->promo,
88
  true
89
  );
includes/admin/settings/class-optimize.php CHANGED
@@ -111,11 +111,11 @@ class OMGF_Admin_Settings_Optimize extends OMGF_Admin_Settings_Builder
111
  $cache_key = $handle;
112
  }
113
 
114
- $downloaded = file_exists(OMGF_CACHE_PATH . "/$cache_key/$cache_key.css");
115
  $unloaded = in_array($handle, $unloaded_stylesheets);
116
  ?>
117
  <li class="<?= OMGF_CACHE_IS_STALE ? 'stale' : ($unloaded ? 'unloaded' : ($downloaded ? 'found' : 'not-found')); ?>">
118
- <strong><?= $handle; ?></strong> <em>(<?= sprintf(__('stored in %s', $this->plugin_text_domain), str_replace(ABSPATH, '', OMGF_CACHE_PATH . "/$cache_key")); ?>)</em> <?php if (!$unloaded) : ?><a href="<?php echo $downloaded ? "#$handle" : '#'; ?>" data-handle="<?php echo esc_attr($handle); ?>" id="<?php echo $downloaded ? 'omgf-manage-stylesheet' : 'omgf-remove-stylesheet'; ?>" title="<?php echo sprintf(__('Manage %s', $this->plugin_text_domain), $cache_key); ?>"><?php $downloaded ? _e('Configure', $this->plugin_text_domain) : _e('Remove', $this->plugin_text_domain); ?></a><?php endif; ?>
119
  </li>
120
  <?php endforeach; ?>
121
  <?php if (OMGF_CACHE_IS_STALE) : ?>
@@ -387,7 +387,7 @@ class OMGF_Admin_Settings_Optimize extends OMGF_Admin_Settings_Builder
387
  __('Optimize Fonts For Editors/Administrators?', $this->plugin_text_domain),
388
  OMGF_Admin_Settings::OMGF_OPTIMIZE_SETTING_OPTIMIZE_EDIT_ROLES,
389
  OMGF_OPTIMIZE_EDIT_ROLES,
390
- __('Should only be disabled while debugging/testing, e.g. using a page builder or switching themes.', $this->plugin_text_domain)
391
  );
392
  }
393
  }
111
  $cache_key = $handle;
112
  }
113
 
114
+ $downloaded = file_exists(OMGF_UPLOAD_DIR . "/$cache_key/$cache_key.css");
115
  $unloaded = in_array($handle, $unloaded_stylesheets);
116
  ?>
117
  <li class="<?= OMGF_CACHE_IS_STALE ? 'stale' : ($unloaded ? 'unloaded' : ($downloaded ? 'found' : 'not-found')); ?>">
118
+ <strong><?= $handle; ?></strong> <em>(<?= sprintf(__('stored in %s', $this->plugin_text_domain), str_replace(ABSPATH, '', OMGF_UPLOAD_DIR . "/$cache_key")); ?>)</em> <?php if (!$unloaded) : ?><a href="<?php echo $downloaded ? "#$handle" : '#'; ?>" data-handle="<?php echo esc_attr($handle); ?>" id="<?php echo $downloaded ? 'omgf-manage-stylesheet' : 'omgf-remove-stylesheet'; ?>" title="<?php echo sprintf(__('Manage %s', $this->plugin_text_domain), $cache_key); ?>"><?php $downloaded ? _e('Configure', $this->plugin_text_domain) : _e('Remove', $this->plugin_text_domain); ?></a><?php endif; ?>
119
  </li>
120
  <?php endforeach; ?>
121
  <?php if (OMGF_CACHE_IS_STALE) : ?>
387
  __('Optimize Fonts For Editors/Administrators?', $this->plugin_text_domain),
388
  OMGF_Admin_Settings::OMGF_OPTIMIZE_SETTING_OPTIMIZE_EDIT_ROLES,
389
  OMGF_OPTIMIZE_EDIT_ROLES,
390
+ __('OMGF automatically disables on customizer and page builder previews, etc. Disable this if you want to permanently disable OMGF when you\'re logged in. E.g. when testing/debugging.', $this->plugin_text_domain)
391
  );
392
  }
393
  }
includes/class-admin.php CHANGED
@@ -35,12 +35,7 @@ class OMGF_Admin
35
  /**
36
  * Filterable list of options that marks the cache as stale.
37
  */
38
- $this->stale_cache_options = apply_filters(
39
- 'omgf_admin_stale_cache_options',
40
- [
41
- OMGF_Admin_Settings::OMGF_ADV_SETTING_CACHE_DIR,
42
- ]
43
- );
44
 
45
  add_action('admin_enqueue_scripts', [$this, 'enqueue_admin_scripts']);
46
  add_action('admin_notices', [$this, 'print_notices']);
@@ -53,7 +48,6 @@ class OMGF_Admin
53
 
54
  add_filter('alloptions', [$this, 'force_optimized_fonts_from_db']);
55
  add_filter('pre_update_option_omgf_cache_keys', [$this, 'clean_up_cache'], 10, 3);
56
- add_action('pre_update_option_omgf_cache_dir', [$this, 'validate_cache_dir'], 10, 2);
57
  add_filter('pre_update_option', [$this, 'settings_changed'], 10, 3);
58
  }
59
 
@@ -176,7 +170,7 @@ class OMGF_Admin
176
  $cache_keys = explode(',', $old_value);
177
 
178
  foreach ($cache_keys as $key) {
179
- $entries = array_filter((array) glob(OMGF_CACHE_PATH . "/*$key"));
180
 
181
  foreach ($entries as $entry) {
182
  OMGF::delete($entry);
@@ -186,42 +180,6 @@ class OMGF_Admin
186
  return $value;
187
  }
188
 
189
- /**
190
- * Perform a few checks before saving the Cache Directory value to the database.
191
- *
192
- * @param mixed $new_dir
193
- * @param mixed $old_dir
194
- * @return mixed
195
- */
196
- public function validate_cache_dir($new_dir, $old_dir)
197
- {
198
- $allowed_path = WP_CONTENT_DIR . $new_dir;
199
- $mkdir = true;
200
-
201
- if (!file_exists($allowed_path)) {
202
- /**
203
- * wp_mkdir_p() already does some simple checks for path traversal, but we check it again using realpath() later on anyway.
204
- */
205
- $mkdir = wp_mkdir_p($allowed_path);
206
- }
207
-
208
- if (!$mkdir) {
209
- OMGF_Admin_Notice::set_notice(sprintf(__('Something went wrong while trying to create OMGF\'s Cache Directory: %s. Setting wasn\'t updated.', $this->plugin_text_domain), $new_dir), 'omgf-create-cache-dir-failed', 'error');
210
-
211
- return $old_dir;
212
- }
213
-
214
- $real_path = realpath($allowed_path);
215
-
216
- if ($real_path != rtrim($allowed_path, '/')) {
217
- OMGF_Admin_Notice::set_notice(__('OMGF\'s Cache Directory wasn\'t changed. Attempted path traversal.', $this->plugin_text_domain), 'omgf-attempted-path-traversal', 'error');
218
-
219
- return $old_dir;
220
- }
221
-
222
- return $new_dir;
223
- }
224
-
225
  /**
226
  * Shows notice if $option_name is in $show_notice array.
227
  *
35
  /**
36
  * Filterable list of options that marks the cache as stale.
37
  */
38
+ $this->stale_cache_options = apply_filters('omgf_admin_stale_cache_options', []);
 
 
 
 
 
39
 
40
  add_action('admin_enqueue_scripts', [$this, 'enqueue_admin_scripts']);
41
  add_action('admin_notices', [$this, 'print_notices']);
48
 
49
  add_filter('alloptions', [$this, 'force_optimized_fonts_from_db']);
50
  add_filter('pre_update_option_omgf_cache_keys', [$this, 'clean_up_cache'], 10, 3);
 
51
  add_filter('pre_update_option', [$this, 'settings_changed'], 10, 3);
52
  }
53
 
170
  $cache_keys = explode(',', $old_value);
171
 
172
  foreach ($cache_keys as $key) {
173
+ $entries = array_filter((array) glob(OMGF_UPLOAD_DIR . "/*$key"));
174
 
175
  foreach ($entries as $entry) {
176
  OMGF::delete($entry);
180
  return $value;
181
  }
182
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
183
  /**
184
  * Shows notice if $option_name is in $show_notice array.
185
  *
includes/class-ajax.php CHANGED
@@ -128,8 +128,8 @@ class OMGF_AJAX
128
  }
129
 
130
  $section = str_replace('*', '', $_POST['section']);
131
- $set_path = rtrim(OMGF_CACHE_PATH . $section, '/');
132
- $resolved_path = realpath(OMGF_CACHE_PATH . $section);
133
 
134
  if ($resolved_path != $set_path) {
135
  wp_die(__('Attempted path traversal detected. Sorry, no script kiddies allowed!', $this->plugin_text_domain));
@@ -137,7 +137,7 @@ class OMGF_AJAX
137
 
138
  try {
139
  $section = $_POST['section'];
140
- $entries = array_filter((array) glob(OMGF_CACHE_PATH . $section));
141
 
142
  $this->empty_cache($section, $entries);
143
 
@@ -154,7 +154,7 @@ class OMGF_AJAX
154
 
155
  private function empty_cache($section)
156
  {
157
- $entries = array_filter((array) glob(OMGF_CACHE_PATH . $section));
158
  $instructions = apply_filters(
159
  'omgf_clean_up_instructions',
160
  [
128
  }
129
 
130
  $section = str_replace('*', '', $_POST['section']);
131
+ $set_path = rtrim(OMGF_UPLOAD_DIR . $section, '/');
132
+ $resolved_path = realpath(OMGF_UPLOAD_DIR . $section);
133
 
134
  if ($resolved_path != $set_path) {
135
  wp_die(__('Attempted path traversal detected. Sorry, no script kiddies allowed!', $this->plugin_text_domain));
137
 
138
  try {
139
  $section = $_POST['section'];
140
+ $entries = array_filter((array) glob(OMGF_UPLOAD_DIR . $section));
141
 
142
  $this->empty_cache($section, $entries);
143
 
154
 
155
  private function empty_cache($section)
156
  {
157
+ $entries = array_filter((array) glob(OMGF_UPLOAD_DIR . $section));
158
  $instructions = apply_filters(
159
  'omgf_clean_up_instructions',
160
  [
includes/class-download.php CHANGED
@@ -42,10 +42,10 @@ class OMGF_Download
42
  string $extension,
43
  string $path
44
  ) {
45
- $this->url = $url;
46
- $this->filename = $filename;
47
  $this->extension = $extension;
48
- $this->path = $path;
49
  }
50
 
51
  /**
42
  string $extension,
43
  string $path
44
  ) {
45
+ $this->url = $url;
46
+ $this->filename = $filename;
47
  $this->extension = $extension;
48
+ $this->path = $path;
49
  }
50
 
51
  /**
includes/class-omgf.php CHANGED
@@ -36,8 +36,8 @@ class OMGF
36
  }
37
 
38
  add_action('admin_init', [$this, 'do_optimize']);
39
- add_filter('pre_update_option_omgf_optimized_fonts', [$this, 'base64_decode_optimized_fonts']);
40
  add_filter('content_url', [$this, 'force_ssl'], 1000, 2);
 
41
 
42
  /**
43
  * Render plugin update messages.
@@ -59,9 +59,9 @@ class OMGF
59
  define('OMGF_UNLOAD_STYLESHEETS', esc_attr(get_option(OMGF_Admin_Settings::OMGF_OPTIMIZE_SETTING_UNLOAD_STYLESHEETS, '')));
60
  define('OMGF_CACHE_KEYS', esc_attr(get_option(OMGF_Admin_Settings::OMGF_OPTIMIZE_SETTING_CACHE_KEYS, '')));
61
  define('OMGF_OPTIMIZE_EDIT_ROLES', esc_attr(get_option(OMGF_Admin_Settings::OMGF_OPTIMIZE_SETTING_OPTIMIZE_EDIT_ROLES, 'on')));
62
- define('OMGF_CACHE_DIR', esc_attr(get_option(OMGF_Admin_Settings::OMGF_ADV_SETTING_CACHE_DIR)) ?: '/uploads/omgf');
63
  define('OMGF_UNINSTALL', esc_attr(get_option(OMGF_Admin_Settings::OMGF_ADV_SETTING_UNINSTALL)));
64
- define('OMGF_CACHE_PATH', WP_CONTENT_DIR . OMGF_CACHE_DIR);
 
65
  }
66
 
67
  /**
@@ -133,7 +133,7 @@ class OMGF
133
  /**
134
  * Only rewrite URLs requested by this plugin. We don't want to interfere with other plugins.
135
  */
136
- if (strpos($url, OMGF_CACHE_DIR) === false) {
137
  return $url;
138
  }
139
 
36
  }
37
 
38
  add_action('admin_init', [$this, 'do_optimize']);
 
39
  add_filter('content_url', [$this, 'force_ssl'], 1000, 2);
40
+ add_filter('pre_update_option_omgf_optimized_fonts', [$this, 'base64_decode_optimized_fonts']);
41
 
42
  /**
43
  * Render plugin update messages.
59
  define('OMGF_UNLOAD_STYLESHEETS', esc_attr(get_option(OMGF_Admin_Settings::OMGF_OPTIMIZE_SETTING_UNLOAD_STYLESHEETS, '')));
60
  define('OMGF_CACHE_KEYS', esc_attr(get_option(OMGF_Admin_Settings::OMGF_OPTIMIZE_SETTING_CACHE_KEYS, '')));
61
  define('OMGF_OPTIMIZE_EDIT_ROLES', esc_attr(get_option(OMGF_Admin_Settings::OMGF_OPTIMIZE_SETTING_OPTIMIZE_EDIT_ROLES, 'on')));
 
62
  define('OMGF_UNINSTALL', esc_attr(get_option(OMGF_Admin_Settings::OMGF_ADV_SETTING_UNINSTALL)));
63
+ define('OMGF_UPLOAD_DIR', apply_filters('omgf_upload_dir', WP_CONTENT_DIR . '/uploads/omgf'));
64
+ define('OMGF_UPLOAD_URL', apply_filters('omgf_upload_url', WP_CONTENT_URL . '/uploads/omgf'));
65
  }
66
 
67
  /**
133
  /**
134
  * Only rewrite URLs requested by this plugin. We don't want to interfere with other plugins.
135
  */
136
+ if (strpos($url, OMGF_UPLOAD_URL) === false) {
137
  return $url;
138
  }
139
 
includes/class-optimize.php CHANGED
@@ -80,7 +80,7 @@ class OMGF_Optimize
80
  $this->handle = sanitize_title_with_dashes($handle);
81
  $this->original_handle = sanitize_title_with_dashes($original_handle);
82
  $this->subset = $subset;
83
- $this->path = OMGF_CACHE_PATH . '/' . $this->handle;
84
  $this->return = $return;
85
  }
86
 
80
  $this->handle = sanitize_title_with_dashes($handle);
81
  $this->original_handle = sanitize_title_with_dashes($original_handle);
82
  $this->subset = $subset;
83
+ $this->path = OMGF_UPLOAD_DIR . '/' . $this->handle;
84
  $this->return = $return;
85
  }
86
 
includes/class-uninstall.php CHANGED
@@ -42,7 +42,7 @@ class OMGF_Uninstall
42
 
43
  $this->wpdb = $wpdb;
44
  $this->options = $settings->get_settings();
45
- $this->cacheDir = OMGF_CACHE_PATH;
46
 
47
  $this->remove_db_entries();
48
  $this->delete_files();
42
 
43
  $this->wpdb = $wpdb;
44
  $this->options = $settings->get_settings();
45
+ $this->cacheDir = OMGF_UPLOAD_DIR;
46
 
47
  $this->remove_db_entries();
48
  $this->delete_files();
includes/frontend/class-process.php CHANGED
@@ -431,9 +431,9 @@ class OMGF_Frontend_Process
431
  /**
432
  * Regular requests (in the frontend) will end here if the file exists.
433
  */
434
- if (!isset($_GET['omgf_optimize']) && file_exists(OMGF_CACHE_PATH . "/$handle/$handle.css")) {
435
  $search[$key] = $stack['href'];
436
- $replace[$key] = content_url(OMGF_CACHE_DIR . "/$handle/$handle.css") . '?ver=' . $this->timestamp;
437
 
438
  continue;
439
  }
431
  /**
432
  * Regular requests (in the frontend) will end here if the file exists.
433
  */
434
+ if (!isset($_GET['omgf_optimize']) && file_exists(OMGF_UPLOAD_DIR . "/$handle/$handle.css")) {
435
  $search[$key] = $stack['href'];
436
+ $replace[$key] = OMGF_UPLOAD_URL . "/$handle/$handle.css?ver=" . $this->timestamp;
437
 
438
  continue;
439
  }
readme.md CHANGED
@@ -30,6 +30,7 @@ All Google Fonts are listed in the **Manage Optimized Fonts** section of OMGF's
30
  - **Reduce the filesize** of your fonts and stylesheets, by using the *Force subset* and *Include File Types* feature (OMGF Pro required),
31
 
32
  ### Additional Features in OMGF Pro
 
33
  - "Dig deeper" to find Google Fonts and optimize further. OMGF Pro supports:
34
  - `@font-face` and `@import` statements inside **inline `<style>` blocks**,
35
  - `@font-face` and `@import` statements inside **local stylesheets** loaded by e.g. your theme and/or plugins,
30
  - **Reduce the filesize** of your fonts and stylesheets, by using the *Force subset* and *Include File Types* feature (OMGF Pro required),
31
 
32
  ### Additional Features in OMGF Pro
33
+ - **Multisite** support,
34
  - "Dig deeper" to find Google Fonts and optimize further. OMGF Pro supports:
35
  - `@font-face` and `@import` statements inside **inline `<style>` blocks**,
36
  - `@font-face` and `@import` statements inside **local stylesheets** loaded by e.g. your theme and/or plugins,
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.9
6
- Stable tag: 5.0.5
7
  Requires PHP: 7.0
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -38,6 +38,7 @@ All Google Fonts are listed in the **Manage Optimized Fonts** section of OMGF's
38
  - **Reduce the file size** of your fonts and stylesheets, by using the *Force subset* and *Include File Types* feature (OMGF Pro required),
39
 
40
  = Additional Features in OMGF Pro =
 
41
  - "Dig deeper" to find Google Fonts and optimize further. OMGF Pro supports:
42
  - `@font-face` and `@import` statements inside **inline `<style>` blocks**,
43
  - `@font-face` and `@import` statements inside **local stylesheets** loaded by your theme and/or plugins,
@@ -75,6 +76,12 @@ For the FAQ, [click here](https://docs.ffw.press/category/76-omgf-pro---faq).
75
 
76
  == Changelog ==
77
 
 
 
 
 
 
 
78
  = 5.0.5 =
79
  * Added: Compatibility with Mesmerize Pro theme; this theme loads Google Fonts asynchronously, which causes CLS.
80
  * Added: UNIX timestamp cached stylesheets to make sure browser cache of visitors is busted, upon cache refresh.
@@ -95,7 +102,7 @@ For the FAQ, [click here](https://docs.ffw.press/category/76-omgf-pro---faq).
95
  = 5.0.2 =
96
  * Fixed: Use Site Address (URL) to run first optimization scan, instead of WordPress Address (URL), because the WordPress install URL can differ from the frontend URL.
97
  * Fixed: Make sure stylesheet URL is properly decoded and HTML entities, etc. are removed, before attempting to process it. (This would cause parameters, like `subset` or `display`, to get lost).
98
- * Added: omgf_optimize_query_subset filter to OMGF_Optimize class.
99
 
100
  = 5.0.1 =
101
  * Fixed: Previous versions of OMGF would save stylesheet handles without the appended '-css' string. This is now brought back to guarantee a smooth transition to v5.
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.9
6
+ Stable tag: 5.0.6
7
  Requires PHP: 7.0
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
38
  - **Reduce the file size** of your fonts and stylesheets, by using the *Force subset* and *Include File Types* feature (OMGF Pro required),
39
 
40
  = Additional Features in OMGF Pro =
41
+ - **Multisite** support,
42
  - "Dig deeper" to find Google Fonts and optimize further. OMGF Pro supports:
43
  - `@font-face` and `@import` statements inside **inline `<style>` blocks**,
44
  - `@font-face` and `@import` statements inside **local stylesheets** loaded by your theme and/or plugins,
76
 
77
  == Changelog ==
78
 
79
+ = 5.0.6 =
80
+ * Added: Removed Cache Directory in favor of an automatic approach to improve UX, because most people didn't change the default value anyway.
81
+ - I.e. all files generated by OMGF are stored in a subdirectory of the Uploads folder (default `wp-content/uploads`), called `omgf`.
82
+ - For most of you nothing will change, but `omgf_upload_dir` and `omgf_upload_url` filters are available for DEVs who want to modify the default value, although I really can't think of a reason why you'd want to do that.
83
+ * Reworded description of Optimize for logged-in Administrators/Editors option.
84
+
85
  = 5.0.5 =
86
  * Added: Compatibility with Mesmerize Pro theme; this theme loads Google Fonts asynchronously, which causes CLS.
87
  * Added: UNIX timestamp cached stylesheets to make sure browser cache of visitors is busted, upon cache refresh.
102
  = 5.0.2 =
103
  * Fixed: Use Site Address (URL) to run first optimization scan, instead of WordPress Address (URL), because the WordPress install URL can differ from the frontend URL.
104
  * Fixed: Make sure stylesheet URL is properly decoded and HTML entities, etc. are removed, before attempting to process it. (This would cause parameters, like `subset` or `display`, to get lost).
105
+ * Added: `omgf_optimize_query_subset` filter to OMGF_Optimize class.
106
 
107
  = 5.0.1 =
108
  * Fixed: Previous versions of OMGF would save stylesheet handles without the appended '-css' string. This is now brought back to guarantee a smooth transition to v5.