=== WP-Optimize – Cache, Compress images, Minify & Clean database to boost page speed & performance ===
Contributors: DavidAnderson, ruhanirabin, DNutbourne, aporter, snightingale, lumberhack, webulous
Donate link: https://david.dw-perspective.org.uk/donate
Tags: cache, caching, image cache, minify, performance cache, page speed, image optimizer, compress images, optimize database, clean database
Requires PHP: 7.2
Requires at least: 4.9
Tested up to: 7.0
Stable tag: 4.5.3
License: GPLv2+
License URI: https://www.gnu.org/licenses/gpl-2.0.html

Get caching and more with this powerful cache plugin. Cache, optimize images, clean your database and minify for maximum performance.

== Description ==

MORE THAN A CACHING PLUGIN

<strong><a href="https://www.teamupdraft.com/wp-optimize?utm_source=wpo-wp-dir&utm_medium=referral&utm_campaign=plugin-dir&utm_content=wp_optimize&utm_creative_format=description">WP-Optimize</a> is trusted by more than 1 million WordPress website</strong> owners to <strong>boost performance</strong> and <strong>reduce page load times</strong> to improve your site's <strong>user experiences</strong> and <strong>SERP rankings in Google.</strong>

It does this in four clever ways:

<strong>1. It caches your site</strong>

Caching is the process of storing a temporary HTML version of your site on the server so it can be retrieved more quickly for the user.

It's a sure-fire way to ensure web pages load at lightning-fast speed. Turn it on in just one click.

<strong>2. It compresses images</strong>

Large images can really impact page speed load times. WP-Optimize makes it easy to identify and compress images to your preferred lossy / lossless settings in a couple of clicks.

<strong>3. It cleans the database</strong>

Your WordPress database stores everything that you need, plus some things that you don't. WP-Optimize cleans and optimizes the database to speed up your site and save server resources.

<strong>4. It minifies</strong>

On top of its three main features, WP-Optimize Cache also has the more advanced minification feature.

Together with caching, minification dramatically improves performance and page speed load time.

== 1. CACHE YOUR SITE ==

<strong>Turn on caching in just one click:</strong>

WP-Optimize automatically and optimally configures itself for your WordPress site. Turn it on in one-click or refine its settings if you prefer.

<strong>More cache features:</strong>

* <strong>Cache preloading:</strong> This feature emulates a visit to your site, meaning cached files are served straight away, speeding up your site from the very first visit.

* <strong>GZIP Compression:</strong> When the server isn't configured to do so, WP-Optimize delivers HTML, CSS and JS files  to the user's browser as smaller, compressed files, reducing the size of pages and style sheets by up to 90%!

* <strong>Preload key requests:</strong> Recommended by Google to improve page speed times. Critical resources (things like font files) get loaded first, so the page loads much faster <strong>[Premium]</strong>.

<strong>Use cache settings to:</strong>

* <strong>Serve cached content to logged in users:</strong> Turn this on if content stays the same for logged in users (or turn on and exclude URLs where content does change e.g. my account areas).

* <strong>Exclude content from cache:</strong> Exclude by URL, conditional tags, browser agent strings or list cookies that should prevent caching when set (advanced user settings).

* <strong>Deliver device-specific cache:</strong> Serve separate cache files to desktop and mobile devices . This ensures that responsive features e.g. desktop and mobile menus are cached separately and served correctly.

* <strong>User per role cache:</strong> Useful if your website delivers different content to different user roles. e.g. an e-commerce site that displays different content to resellers or consumers <strong>[Premium]</strong>.

* <strong>User specific cache:</strong> Serves separate cache files to individual users. Useful for websites with personalised content e.g. Learning management systems <strong>[Premium]</strong>.

* <strong>Cache purging permissions:</strong> Select which user roles are allowed to purge the cache e.g. admin only or perhaps a 'teacher' role in an LMS setting only <strong>[Premium]</strong>.

== 2. COMPRESS IMAGES ==

* <strong>Lossy or lossless compression options:</strong> Choose between maximum space saving, best image quality or somewhere in-between.

* <strong>WebP conversion:</strong> Recommended by Google, WebP can achieve up to 34% smaller file sizes compared to JPEG and up to 26% compared to PNG.

* <strong>Auto-compress:</strong> Check a box and every new image you upload will automatically be compressed to your preferred lossy / lossless settings.

* <strong>Bulk compression:</strong> Compress every existing image on your site with the press of a button.

* <strong>Restore original:</strong> Gone too far? Revert images back to their original in one click.

* <strong>Retain EXIF image data:</strong> Check a box to retain EXIF image data during compression.

* <strong>Lazy Load:</strong> Webpages load much faster by loading web parts gradually, when they're needed vs simultaneous loading of everything, all at once <strong>[Premium]</strong>.

* <strong>Delete orphaned images:</strong> Identify and delete unused images from your Wordpress website, saving disk space <strong>[Premium]</strong>.

* <strong>Delete unused image sizes:</strong> WordPress creates multiple sizes for every uploaded image causing the uploads folder to become bloated. Scan for image sizes not in use and remove them to save further disk space <strong>[Premium]</strong>.


== 3. CLEAN AND OPTIMIZE THE DATABASE ==

Cleans-up database tables, post revisions, auto draft posts, trashed posts, spam, trashed comments and more. Choose what to optimize or it's one click to clean out the lot.

* <strong>Schedule clean-ups:</strong> So you can set and forget. Choose from daily, weekly, fortnightly or monthly.

* <strong>Flexible clean-up schedules:</strong> You may wish to optimize database tables more frequently than you remove unapproved comments (for example). Choose the specific time and day when tasks should run <strong>[Premium]</strong>.

* <strong>Retain a set number of weeks' data during clean-ups:</strong> Just in case you need to retrieve something.

* <strong>Back up before clean-ups:</strong> If you delete something you shouldn't, restore it in a couple of clicks with UpdraftPlus.

* <strong>Power tweak - Turbo boost for WooCommerce:</strong>  Unique to WP-Optimize, this power tweak boosts performance by replacing a slow query in WooCommerce with two much more efficient queries. E-commerce sites transacting high numbers of orders stand to gain here <strong>[Premium]</strong>.

* <strong>Power tweak - Boost performance by indexing the postmeta table:</strong> This unique power tweak works by allowing the WordPress postmeta table to be indexed, improving performance <strong>[Premium]</strong>.


== 4. MINIFY AND COMBINE HTML, CSS AND JAVASCRIPT ==

* <strong>Minify in just one click:</strong> Minifies HTML, JavaScript and CSS. Toggle on or off or customise each one under 'settings'.

* <strong>Customise minification:</strong> Minify only (removing unnecessary code e.g line breaks and white spacing) or minify and merge. Apply the same or different settings to HTML, CSS and JavaScript.

* <strong>Asynchronous loading:</strong> Choose non-critical CSS and JavaScript files to load in the background and independently of other resources e.g. analytics or pixel scripts. Loading asynchronously eliminates render blocking and improves page speed.

* <strong>Exclude files from being minified:</strong> Specify CSS and JavaScript files to exclude from minification.

* <strong>Optimize fonts:</strong> Optimize Font Awesome and Google Fonts. Inline the font files, inherit from CSS settings or load CSS / Javascript asynchronously instead.

* <strong>Preload assets:</strong> WP-Optimize visits each web page on your site so the code is minified and preloaded for real life users, right from their very first visit.

* <strong>Preload key requests:</strong> Recommended by Google to improve page speed times. Critical resources (things like font files) get loaded first, so the page loads much faster.


== WHY WP-OPTIMIZE? ==

* It's brought to you by [TeamUpdraft](https://www.teamupdraft.com?utm_source=wpo-wp-dir&utm_medium=referral&utm_campaign=plugin-dir&utm_content=teamupdraft&utm_creative_format=description), the team behind the world's most trusted backup, migration and restoration plugin.
* It's easy to use.
* It packs a punch for a free plugin.


WP-Optimize brings the best cache and optimization technology together into one single, seamless plugin to make your WordPress site fast, lean and efficient.

== PREMIUM FEATURES AT A GLANCE ==

Our free version of WP-Optimize Cache is great, but we also have an even more powerful [Premium version](https://www.teamupdraft.com/wp-optimize/pricing?utm_source=wpo-wp-dir&utm_medium=referral&utm_campaign=plugin-dir&utm_content=premium_version&utm_creative_format=description) with extra features that offer the ultimate in freedom and flexibility:

* <strong>Multisite Support:</strong> extends database optimisations so they function for multiple WordPress sites at a time. If you manage more than one website, you will need WP-Optimize Cache Premium.
* <strong>Flexibility and Control:</strong> gives you the power to optimize select individual tables or a particular combination of tables on one or more WordPress websites, rather than having to optimize all database tables.
* <strong>Deleting unused and unwanted images:</strong> removes orphaned images from your WordPress site, plus images of a certain, pre-defined size.
* <strong>Sophisticated Scheduling:</strong> offers a wide range of options for scheduling automatic optimization. Specify an exact time and run clean-ups daily, weekly, fortnightly or monthly and perform any number of additional once off optimizations.
* <strong>Seamless Graphical User Interface:</strong> for superb clarity in scheduling and managing of multi-site optimizations.
* <strong>WP-CLI support:</strong> provides a way to manage optimizations from command-line interface if you have lots of sites
* <strong>Lazy Loading:</strong> load only the images and part of a web-page when it is visible to the user so they can see something very quickly.
* <strong>Optimization Preview:</strong> gives users the ability to preview, select and remove data and records available for optimization from the database.
* <strong>Preload key requests:</strong> preload assets such as web fonts and icon fonts, as recommended by Google PageSpeed Insights.
* <strong>Premium support</strong> - caching is one of the most complex things you can do for a website, so premium support offers you peace of mind there's someone to talk quickly to if you need any technical answers or help configuring the optimizations of cache settings for your website.

= Translations =

Translators are welcome to contribute to the plugin. Please use the [WordPress translation website](https://translate.wordpress.org/projects/wp-plugins/wp-optimize).

== Installation ==

There are 3 different ways to install WP-Optimize Cache, as with any other wordpress.org plugin.

= Using the WordPress dashboard =

1. Navigate to the 'Add New' in the plugins dashboard
2. Search for 'WP-Optimize'
3. Click 'Install Now'
4. Activate the plugin on the Plugin dashboard

= Uploading in WordPress Dashboard =

1. Download the latest version of this plugin from https://wordpress.org/plugins/wp-optimize/
2. Navigate to the 'Add New' in the plugins dashboard
3. Navigate to the 'Upload' area
4. Select the zip file (from step 1.) from your computer
5. Click 'Install Now'
6. Activate the plugin in the Plugin dashboard

= Using FTP =

1. Download the latest version of this plugin from https://wordpress.org/plugins/wp-optimize/
2. Unzip the zip file, which will extract the wp-optimize directory to your computer
3. Upload the wp-optimize directory to the /wp-content/plugins/ directory in your web space
4. Activate the plugin in the Plugin dashboard

== Frequently Asked Questions ==

= Isn't it better to use a dedicated caching plugin to cache my site? =

We've built WP-Optimize Cache around the most advanced and powerful caching technology. Our caching tests and feedback from real-world users show that the caching feature alone can make your site faster than any other cache plugin or optimization. <a href="https://ps.w.org/wp-optimize/assets/screenshot-1.png?rev=2125386">See these speed test results.</a>

= Is optimizing my database safe? =
Yes; optimizing does not involve any "tricks" or poking around in dangerous ways. It involves running routine clean-up operations using well-defined, common MySQL commands. <strong>Nevertheless, we always recommend backups</strong>, which cover every possibility; not just database malfunctions, but hackers, human errors, etc. We recommend <a href="https://wordpress.org/plugins/updraftplus/">UpdraftPlus</a>.

= What savings can I expect to make? =
This is a "how long is string?" sort of question. It depends completely on your site - how big it is, how many users interact on it, how long it has been running, and when you last optimised it. However, the savings and speed-ups can be substantial; it is always worth making sure that your database is optimised.

= How do I get support? =
In our support forum, here: https://wordpress.org/support/plugin/wp-optimize/

= WP-Optimize does not make large savings on my database =
This is rare; it's probably because you're with a shared web hosting company that doesn't allow scripts to run an optimize command via SQL statements (SQL "OPTIMIZE" instruction). Please consult your web hosting company on this matter.

= Is the plugin tried and tested? =
Yes - WP-Optimize Cache is WordPress's #1 most-installed optimisation plugin, with over 800,000 users and a pedigree going back over 8 years.

= Does WP-Optimize support InnoDB tables? =
WP-Optimize will disable some features if it detects InnoDB tables. Optimization of the database tables on-disk is not available, but other clean up features would work.

= Can you help me restore my database? =
Not unless you have an existing backup. Please ensure that you make a backup of your entire database before using WP-Optimize for the first time, and when you upgrade to a major new version of it. We recommend <a href="https://wordpress.org/plugins/updraftplus/">UpdraftPlus</a>.

= Are there any bugs in this plugin? =
The plugin is an ongoing work; that means that it is impossible to rule out unforeseen situations and bugs. So I would recommend you to test it out on your local system or make a backup of your database (just to be extra careful).

= How do I stop transient options from coming back automatically each time I clear them? =
When WordPress uses a particular transient, that specific transient is re-created automatically. So, it's normally for ones which are in active use to gradually re-appear. The best way to keep things optimal is to clear the transient options on a scheduled basis. For example, WordPress may create 50 transient option in a week. If you schedule WP-Optimize Cache to clear these options on a weekly basis, you'll have far fewer building up.

= The table size shows wrong / Not optimizing  =
Please check your database for corrupted tables. That can happen, usually your web hosting company can run the repair command on the db.

= Which WordPress and PHP versions are supported? =
To use all features in the plugin, a minimum of version WordPress 4.9 with PHP 7.2 are required. But we do recommend to use the latest version of WordPress. Using PHP 7.2+ is also highly recommended, as our caching feature will work even faster.

= Which optimisation will make the biggest difference? =
This depends on your setup (theme, number and quality of plugins used, etc...), but generally, caching will make the biggest visible difference to your website's performance. Indeed, the cache functionality bypasses most of WordPress code to serve your pre-optimised cached pages directly to your visitor, significantly increasing the speed.

= What is caching, or page caching? =
<em>"Caching", from Wikipedia:</em> "In computing, a cache is a hardware or software component that stores data so that future requests for that data can be served faster; the data stored in a cache might be the result of an earlier computation or a copy of data stored elsewhere. A cache hit occurs when the requested data can be found in a cache, while a cache miss occurs when it cannot." — WP-Optimize cache does this by saving the page computed by WordPress on the disk. When a user visits a page, WP-Optimize will serve the cached page before WordPress is loaded. If the page wasn't cached before, it will be computed by WordPress, and WP-Optimize will then save the result to the cache.

= Why should I use a caching plugin on my website? =
You think your site is fast without caching? A caching plugin will make your website even faster. A faster cached website will increase SEO, it will improve your visitors experience. Caching will also save your server's resources.

= Is the WP-Optimize page cache compatible with Gutenberg and WordPress 5.0+? =
Yes, your Gutenberg pages will be cached, as well as those created with page builder plugins such as Elementor.

= How do I know my webpage is being cached (or why it isn't)? =
If cache is enabled, and in order to see if your page is cached, use the "View Source" function in your web browser to view the page source. To find caching information, scroll down to the bottom, and you should see a line added by the cache: `<!-- Cached by WP Optimize - https://teamupdraft.com/wp-optimize/ - Last modified: Sat, 20 Jul 2019 21:17:19 GMT ->`
However, note that if you are using a further service that minifies HTML (e.g. Cloudflare), then this line may have been removed. Another method is to inspect the contents of the directory wpo-cache inside your wp-content directory. <a href="https://teamupdraft.com/documentation/wp-optimize/topics/caching/faqs/how-do-i-know-my-webpage-is-being-cached/>Further information can be read here</a>
Also note that if you do not preload the cache, a page or post will have to be visited once for the cache file to be generated.

= How do I configure the page cache? =
Go to WP-Optimize -> Cache and enable caching. For most people, that will be enough. If you run an e-commerce, have a custom login page or any page that has dynamic content, you might want to exclude certain urls from the cache. Visit <a href="https://www.teamupdraft.com/documentation/wp-optimize?utm_source=wpo-wp-dir&utm_medium=referral&utm_campaign=plugin-dir&utm_content=documentation&utm_creative_format=faqs">documentation</a> for help.

= Is the caching feature compatible with e-commerce plugins? =
Yes, caching with WP-Optimize Cache allows you to safely cache your products, with plugins like WooCommerce or Easy Digital Downloads, or any e-commerce that uses `DONOTCACHEPAGE` to exclude sensitive pages from caching (e.g. my account, cart or checkout pages).

= Is the caching feature compatible with multilingual plugins? =
Yes, WP-Optimize works with popular multilingual plugins like WPML or Polylang. However, it's important to note that when using WP-Optimize with multilingual plugins, the URL format for different languages should not include any query parameters, for example `https://example.com/?lang=en`. Instead, it should be in a pretty permalink format, such as `https://example.com/en`.

= Do I need a special setup to use the caching feature? =
No, if WordPress works properly, WP-Optimize will be able to cache your pages and posts.

= Can I use the page caching feature together with another cache plugin? =
No, because both cache plugins would need to use the drop-in plugin `advanced-cache.php`. If you turn off caching on WP-Optimize Cache, you can use any other caching plugin and still use the other features of WP-Optimize. But we do recommend using our caching solution.

= Is WP-Optimize caching compatible with Cloudflare? =
Yes! No special cache configuration is needed. Page caching on the WP site (that done by WP-Optimize Cache) is independent of proxy caching (e.g. Cloudflare) – you can use both, or neither, and they will complement each other and not interfere. <br>Just one thing to note – Cloudflare will strip out the special HTML comment at the bottom of the source of a page that is helpful to confirm that page caching is working, so, don't be confused by that – it's absence doesn't indicate the cache is not working.

= Can I empty the cache automatically when performing a custom action? =
Yes, you can trigger a cache purge action using WP-Optimize Cache public functions. If you want to clear the whole cache, use the function `wpo_cache_flush()`. If you want to clear the cache files for a specific page or post, use `WPO_Page_Cache::delete_single_post_cache($post_id);`. Those cache options are available after WP action `plugins_loaded`.

= Will the comments work even when page caching is enabled? =
Yes, when using WordPress' commenting system, your users will still be able to post comments. Every time a comment is approved, the cache for that page or post will be cleared, allowing the next visitor to see an up to date list of comments.

= What is "cache preloading"? =
Usually, a page is cached when a user visits it. So the first user visiting won't be served a cached version of the page, and will wait longer than the next users. The cache preloading functionality will go through all your pages and posts, and simulate a visit by a user, allowing WP-Optimize to cache the pages before anyone visits them. Your first visitor will thus be served a cached version of the page, increasing its performance.

= What frequency should I choose for the cache preloading schedule? =
Choosing a frequency for the cache preloading schedule will depend on factors such as the frequency at which the website content is updated, the number of pages in the cache, the resources of the server and more. 
For example a site with hundreds of pages will require more resources to preload its cache. So choosing a high frequency will mean that the cache will be recreated often, and the resource usage will be higher.
On a website where updates aren't as frequent, you can even disable the cache preloading schedule, or set a high cache lifespan and set the cache preloading schedule to follow it.

= How do I cache only the home page? =
Add /.+ to the cache option "URLs to exclude from cache" on the advanced settings tab.

= How do I prevent WP-Optimize Cache from caching a certain page =
To prevent a page from being cached, you can add the URL to the field "URLs to exclude from cache" in the cache "Advanced settings" tab. If you are developing a plugin and want to prevent a page from being cached, you can define the "DONOTCACHEPAGE" constant on the pages you need. Any request where "DONOTCACHEPAGE" is defined will not be cached.

= Is the caching feature of WP-Optimize free? =
Yes the caching feature is free. You will always be able to cache your website for free using WP-Optimize and we are constantly working on improving the existing cache feature. We will add more caching options to the free version and develop more specific caching options in the premium version to enable you to taylor the caching functionality to your needs.

= Where does WP-Optimize Cache store the cached files? =
The cached files are stored in the common "wp-content/cache" folder, inside a "wpo-cache" folder. Removing the "cache" folder will delete all of WP-Optimize's cache, as well as those from other plugins.
Deleting the "cache" folder is generally safe, as those cached files will be regenerated.

= How do I disable caching? =
Go to WP-Optimize settings > Cache and toggle the "Enable page caching" option to on/off.

= Will caching slow down my server? =
No, caching will actually reduce the load on your server, by reducing the amount of PHP and mysql used. You might see a peak in resource usage when using the cache preloader, as this functionality will create the cache files for all your pages in a short amount of time. But once this is done, performance should increase and the load on your server will decrease. Every single major site uses caching to serve cached pages faster by using fewer resources. 

= Can I make certain parts of the page stay dynamic when cache is enabled? =
The cached page is sent to the user before most of WordPress was loaded. The plugins aren't loaded yet, making it impossible for them to change the cached content at every request.
So at the moment if you want to keep parts of your page dynamic (e.g. adverts, widgets, shopping cart...) AND keep it cached, you will have to use custom solutions using javascript and AJAX to fetch those dynamic parts from the server.

= How do I delete the WP_CACHE define from wp-config.php? =
WP-Optimize Cache will remove the "WP_CACHE" constant from wp-config.php when you disable page caching, or when you deactivate the cache plugin. If you need to remove it manually, you can use FTP to edit wp-config.php and delete the line define ('WP_CACHE', true );
If page caching is still enabled in the settings, WP-Optimize Cache will attempt to add the line again, as it is required for the caching functionality to work. 

= My filesystem is not writable to increase security. What do I need to do to make it compatible with the caching functionality? =
WP-Optimize caching feature needs write access to the 'wp-content/cache' folder, as this is where the cache files will be stored. It also needs to define the constant 'WP_CACHE' in 'wp-config.php', it will need access once to 'wp-content/advanced-cache.php', as well as to the folder 'wp-content/wpo-cache' to write the cache settings. 

= How do I change file permissions? =
If you need to change file permissions to enable caching, you can follow the instructions on this page https://wordpress.org/support/article/changing-file-permissions/

= What is the maximum number of pages I can cache? =
There is no limit to the number of pages you can cache. The only limit is the space on your server and the maximum number of subdirectories allowed by your server, as caching will write files in subdirectories following the permalink structure.
If you were to reach a caching limit, it probably means that your server is not fit for the size of your website and caching needs.

= How do I serve cached pages to people using a phone or tablet? =
You can generate a separate cache by selecting "Generate separate files for mobile devices" in the page cache settings. This cache setting is only necessary if you use a specific theme for mobile devices, or for certain AMP plugins.

= Does WP-Optimize Cache work with Nginx? =
Yes, the cache feature works with Nginx. Should you want to enable browser caching or GZIP compression, you will have to do this yourself directly on the server settings.

= Does caching work with Windows Server (IIS) ? =
Yes, the cache feature works with IIS. As with Nginx, if you need to enable browser caching or GZIP compression, you will have to do this yourself on the server.

= Does the WP-Optimize page cache work with non-pretty (query parameter-based) permalinks? =
No. It's necessary to have pretty permalinks of the type http://xxxxx.com/my-post/ rather than http://xxxxx.com/?p=1234 for cache to work. Pretty permalinks are the WordPress default setting, and there is no good reason to turn them off, so you should not have a problem with this.
Note that cache will work with permalinks including /index.php/. It is only those based upon query parameters (?…) where cache won't work.

= When does WP-Optimize clear the page cache? =
* When you publish new content or update/edit existing content, the cache for that post/page will be cleared.
* Changing/updating current themes and parent themes (of child themes) will purge the cache.
* When turning off the cache feature in WP-Optimize

= Will pages in the WP admin dashboard be cached? =
No, WP dashboard pages are not cached. The cache functionality is only meant to cache frontend pages.

= What is cache lifespan? =
The cache lifespan is the time a cached file will be kept before being regenerated.
One of the main reason for setting a lifespan to your cache is that some plugins and themes use nonces, which are printed in the source code of the page (<a href="https://developer.wordpress.org/plugins/security/nonces/">Read more about nonces here</a>). These nonces cannot be reused and are valid for 12 hours by default (developers can change that value). The cache plugin will store the nonce in the page, and this one will become invalid after that perdiod of time, which can affect certain functionalities of your plugins and themes. Setting a cache lifespan to under 10 hours ensures the cache is flushed automatically before the nonce expires. This way you can use WP-Optimize's cache feature on sites which use nonces.
An other reason is that you may want your pages to reflect some changes without having to clear the whole cache. Indeed if you have many pages and posts, you might not want to clear every cache file with every change, but rather set an interval at which they will expire and be regenerated.

= What value should the cache lifespan be? =
A lower cache lifespan value will result in more frequent cache update activity on your server, and thus more preload processes, if activated. 
If your site does not use nonces, and your site's cache doesn't need to be updated often, you can set the cache lifespan to a high value or to 0 to give it an infinite lifespan.
The cache lifespan option is set to 10 hours by default, but you may go down to 8 or even less. 
If you notice any issues due to high server load, set a higher interval for the preloader.

= Can WP-Optimize Cache minify JavaScript, CSS and HTML? =
Yes, the newly added Minify enables you to minify JavaScript and CSS. It also enables you to minify HTML.

= Why minify my WordPress site? =
WP-Optimize Cache's Minify feature is all about increasing the speed of your WordPress site for your users.
One way Minify does this is by reducing the size of your HTML, CSS and JavaScript files by removing unnecessary spaces and lines from the files and shortening long names internally within the code.
Another way is that your files are merged into as few files as possible. This reduces the amount of load on your web server and can be quicker to load fewer files.
You can also defer the loading of any CSS or JavaScript file. This means any large or extraneous CSS or JavaScript file can be loaded independently from the core of your WordPress site; giving your users quicker access to your site.

= What does "Reset the minified files" actually do? =
Pressing the "Reset the minified files" does:
* delete the temporary files used when generating the minified assets
* delete old minified files (more than 30 days old)
* add a folder for the new minified files, which will be generated when visiting a page
The previously minified CSS files will remain on the server until they expire, or until they're deleted using the button "Delete all the files generated by minify".

= Can I defer CSS and JavaScript using WP-Optimize Cache? =
Yes, the newly added minification feature (a.k.a. Minify) allows you to defer parsing of JavaScript and CSS.

= Google's PageSpeed Insights says to leverage the font-display CSS feature to ensure text is user-visible while webfonts are loading. Can WP-Optimize Cache do that? =
Leveraging the font-display CSS feature is currently possible when using Google Fonts. The default parameter is "swap", but can be changed using the WordPress filter "wpo_minify_gfont_display_type".

= When enabling minify, my site's layout is broken. How can I fix it? =
This usually means one or more of your CSS files are incompatible with the minification or merging process. It can also be caused by errors in the CSS's syntax.
You can check the CSS's syntax by using an online CSS syntax checker such as csslint.net.
If your syntax is not causing the issue, or you cannot change the file with an issue, you can either exclude the problematic CSS files from the minification and merging process.
To exclude individual CSS files from the minification and merging process, you can go to WP-Optimize > Minify > CSS and go to the "Exclude the following CSS files from processing" section.

= When enabling minify, some functionality is broken. How can I fix it? =
This usually means one or more of your JavaScript files are incompatible with the minification or merging process. It can also be caused by errors in the JavaScript's syntax.
The first thing to try is to enable the setting "Contain each included file in its own block" in the JavaScript options (WP-Optimize > Minify > Javascript > JavaScript options). This could "catch" an error, and prevent the rest of the code to be broken.
If the first option didn't work, try disabling merging of JavaScript files.
If none of the above works, disable processing of JavaScript files in the minify settings, and <a href="https://wordpress.org/support/plugin/wp-optimize">open a support thread</a> with details about your issue. We'll do our best to help you troubleshoot the issue.

== Screenshots ==

1. Cache - plugins comparison benchmark
2. Database optimization
3. UpdraftPlus running a backup before an optimization proceeds
4. Table Report
5. Image compression
6. Main cache screen
7. Settings
8. Real world tests show the cache feature alone can make your site faster than any other caching plugin
9. Features comparison


== Changelog ==

= 4.5.3 - 29/Apr/2026 =
* SECURITY: Prevented path traversal security risk. Thanks to Wordfence for the responsible disclosure

= 4.5.2 - 20/Apr/2026 =

* FIX: Bug preg_match() fails on wildcard * patterns in browser agents exclusion list
* FIX: Cache - purge the cache when a plugin is auto-updated
* FIX: Ensure page caching is fully disabled by updating internal cache configuration to prevent constant-related errors in logs
* FIX: Premium - Unused images - Fixed an issue where multiple unused images were displayed for an edited image on setups where images are not stored in /yyyy/mm folders
* FIX: Minify - The cron job to purge old cache files is not created
* REFACTOR: Instead of nested output buffering, code make use of single buffer using Page Optimizer class
* REFACTOR: Refactor Updraft_Smush_Manager::update_smush_options() method
* REFACTOR: Using ABSPATH to prevent direct access instead of plugin constants to comply with PCP
* TWEAK: Added a safety check to remove scheduled table optimization cron jobs when the server does not allow table optimization
* TWEAK: Enhanced database table detection by marking the KD Submissions database table as used by Elementor Pro
* TWEAK: Fixed a UI issue with WebP conversion in the Media Library
* TWEAK: Handle WP_Error in WPO_Page_Cache::enable() callers
* TWEAK: Initialize Heartbeat only on admin pages
* TWEAK: Premium - Preload only selected URLs in the "Cache Specific URLs Only" setting
* TWEAK: Premium - Smush - Improved PHP 8.5 compatibility by replacing deprecated $http_response_header usage
* TWEAK: Updated user agent for the cache preloader

= 4.5.1 - 23/Mar/2026 =

* FIX: Fixed compatibility issue with WP Remote 
* FIX: Notice: Function _load_textdomain_just_in_time was called incorrectly 
* FIX: Resolved weekly cron not running on WordPress < 5.4 by switching to the wpo_weekly schedule
* FIX: Database table error when upgrading from free to premium version
* REFACTOR: Improved WebP conversion flow by separating capability checks from configuration changes
* REFACTOR: Improved auto-optimization handling by correcting static method usage
* REFACTOR: Introduced `WP_Optimize_Server_Compatibility` class to centralize all server environment checks
* REFACTOR: Removed separate `get_schedule_types()` method in premium version
* SECURITY: Enforced capability checks and allowed-command validation for Smush actions triggered via Heartbeat API. Thanks to WordFence for the responsible disclosure
* TWEAK: Display the `Enable the caching menu in the admin bar` option only when Cache or Minify is enabled
* TWEAK: Improved detection of LearnDash plugin tables
* TWEAK: Improved onboarding wizard RTL support and eliminated dependency on the PHP Reflection class
* TWEAK: Improved robustness of `uploads/wpo` directory removal during plugin uninstallation
* TWEAK: Minify - Don't remove the version query argument when the source is not processed by Minify
* TWEAK: Premium - Unused Images - Enhanced detection of edited WordPress images
* TWEAK: Prevent deprecation notices in PHP 8.5
* TWEAK: Add a notice when `.htaccess` file is not available or renamed in Apache servers

= 4.5.0 - 11/Feb/2026 =

* FEATURE: Premium - Cache – Added ability to cache only selected URLs
* FEATURE: Premium - Minify - Host Google Fonts locally
* FEATURE: Premium - Option to enhance page performance by applying Capo.js rules
* FIX: Cache - fixed sitemap caching issue 
* FIX: Improved compatibility with WordPress versions earlier than 6.1
* FIX: Reset WebP conversion failure no longer appears in the popup
* FIX: Resolved issues with detecting WebP conversion availability
* FIX: Smush – Fixed missing tooltip in the 'Compress' pop-up in Media Library
* FIX: Stop initialization of page optimizer for non-HTML requests
* FIX: Remove marcusschwarz/lessc lib from autoload
* TWEAK: Added support for bypassing WPO features via a URL query parameter defined by the WPO_DISABLE_MODE_URL_PARAM constant
* TWEAK: Allow some database records cleanup for Kinsta users
* TWEAK: Clear cache of archived pages when a related post is updated
* TWEAK: Disabled CSS/JS merging by default.
* TWEAK: Enhanced 404 detector compatibility with plain permalinks
* TWEAK: WP_Optimize_Options::auto_option_settings() is not called in Premium version
* TWEAK: Improved timestamp handling to prevent fatal errors on WordPress 4.9
* TWEAK: Improved Minify settings UI so JavaScript options correctly show/hide when JS minification is enabled/disabled

= 4.4.1 - 08/Jan/2026 =

* FIX: Onboarding wizard RTL issue
* FIX: Prevented plugin table JSON data in the uploads directory from being updated on every WP-Optimize admin page load

= 4.4.0 - 12/Dec/2025 =

* FEATURE: Added Onboarding Wizard
* FIX: Ensured old cache purging cron job is scheduled successfully
* FIX: Fixed a potential fatal error in the WPO_Page_Optimizer class
* TWEAK: Fixed the ability to disable caching menu in admin bar
* TWEAK: Updated file permissions for wpo-plugins-tables-list.json

= 4.3.1 - 14/Nov/2025 =

* FIX: Prevent PHP fatal error occurring when cache is enabled and the "Aelia Currency Switcher for WooCommerce" plugin is active
* FIX: Cache – Fixed compatibility issue
* FIX: Database - Table Usage - Fixed the issue with incorrect table name detection in certain cases
* FIX: Fixed UI Issue - Content cut off in "Review Actions" modal under WP-Optimize > Database 
* FIX: Fixed _load_textdomain_just_in_time trigger too early
* FIX: Premium - Unused images - Fixed an issue with clearing the cache of unused images
* FIX: Smush - Compressing an image larger than the reSmush.it service limit freezes the popup in the Media Library
* FIX: Smush - Fixed issue with multiple images compression action
* FIX: Undefined property: stdClass::$plugin_status bug fixed
* REFACTOR: Database - Table Usage - enhanced variable names
* REFACTOR: Using strict comparison throughout the codebase
* TWEAK: Improve detection of cloudflare handling browser cache
* TWEAK: Added validation for AJAX commands in the Premium version
* TWEAK: Convert already compressed images to webp format when possible
* TWEAK: Fix the compatibility issue with ALTCHA when using the ASE Pro Plugin
* TWEAK: Improve browser caching by adding max-age option
* TWEAK: Premium - Cache - Do not process the cache when the user cannot be identified
* TWEAK: Premium - Database - Tables usage report shows data only for active plugins
* TWEAK: Premium - Unused Images - Enhanced detection for Revolution Slider
* TWEAK: Premium - Unused Images - Improved detection of unused images in Oxygen Builder
* TWEAK: Premium - Unused Images - Recognize Oxygen 6 images
* TWEAK: Premium - Prevent PHP warnings from Table Usage feature
* TWEAK: Remove unused jQuery 1.12.4 dependency
* TWEAK: Run database table optimization last
* TWEAK: Updated links
* TWEAK: Various tweaks and improvements to code

= 4.3.0 - 22/Sep/2025 =

* FEATURE: Premium - Cache - Cache REST API requests
* FEATURE: Premium - Further reduce CSS files sizes by removing unused CSS rules
* FIX: Added backward compatibility for timezone and datetime functions and improved status report support for older WordPress versions like 4.9.
* FIX: PHP Warning file_exists(): open_basedir restriction in effect
* FIX: Prevented buffer initialization during wp-cron when HTML DOM is unavailable.
* REFACTOR: Database - Table Usage - Refactored execute_query_analysis() function
* TWEAK: Added new UpdraftCentral endpoints
* TWEAK: Enhanced multisite support: added performance widget to Network Dashboard and fixed sub-site widgets to show only site-specific 404 request counts.
* TWEAK: Fix external loading of Gtag analytics script
* TWEAK: Moved the tooltip tag outside the <label> tag
* TWEAK: Performance - 404 Detector (Not Found Requests) added a button to clear all logs.
* TWEAK: Publishing a post or custom post type (CPT) no longer clears the cache of all posts of the same type.
* TWEAK: Removed return statements from constructors and added checks at the point of class instantiation.
* TWEAK: Smush - Enhanced compatibility and performance with EWWW Image Optimizer installed
* TWEAK: Premium - Added cache support for Nelio A/B Testing plugin
* TWEAK: Added a hook to trigger custom code when a page is not cached

= 4.2.4 - 30/Jul/2025 =

* FIX: Potential PHP fatal error when no site is selected during database optimization in multisite
* FIX: Issue where the database optimization spinner remained indefinitely active
* FIX: PHP 8.4 compatibility warnings
* FIX: Minify default exclusions fatal error
* FIX: Premium - Potential PHP fatal error - type hinting error in the database table usage feature
* FIX: Premium - Page cache and lazy load meta boxes no longer display on post edit screen when their respective options are disabled
* FIX: Only purge relevant files when a published post is saved; also purge the author archive cache upon post save
* FIX: Premium - Fixed compatibility of Table usage with WordPress versions earlier than 5.3
* REFACTOR: Premium - Database - Table Usage - added missed translation functions
* TWEAK: Purged content will preload only when cache is enabled, and the user-agent has been updated to a modern browser and OS version
* TWEAK: Update seasonal advert banner logos, texts and links
* TWEAK: Update plugin readme text and links
* TWEAK: Premium - Cache - Add UI element to ignore query variables
* TWEAK: Premium - Database - Table Usage - replaced loading state with native modal
* TWEAK: Removed seasonal discount ads except Black Friday

= 4.2.3 - 15/Jul/2025 =

* FIX: Cache - Resolved PHP warning caused by excessively long cache file names
* FIX: Corrected typo from `meta data` to `metadata`
* FIX: Cron reschedule event error for hook `wpo_prune_404_log` when `is_minimum_requirement_met` is `false`
* FIX: Premium - Fixed a rare PHP warning that could occur when saving a post
* FIX: Unused image - incorrect image filtering in multisite
* FIX: WP Remote sync conflict caused in v4.2.1 and v4.2.2 By replacing wp_salt with core PHP functions
* FIX: YouTube lazy-load – Thumbnail image now falls back to JPG if browser doesn't support WebP
* FIX: WebP images were not being served in Firefox on certain environments
* TWEAK: 404 detector logs URLs on mobile screens goes out of viewport fixed.
* TWEAK: CSS Improvements, better font size handling, remove duplication, and SASS instead of import
* TWEAK: Delay YouTube preview image cache purging
* TWEAK: Display notice when server does not allow database optimizations
* TWEAK: Enhanced database optimization compatibility with jQuery 4
* TWEAK: Fixed incorrect transients count in database optimizations UI
* TWEAK: Improved sanitization of incoming data in `Updraft_Smush_Manager_Commands`
* TWEAK: Minify - Improved compatibility with Divi theme's dynamically generated assets
* TWEAK: Multisite corrected site count in database optimizations UI.
* TWEAK: Preserve EXIF data is set to false by default in all places at codebase level.
* TWEAK: Update URLs of links and images to point to https://teamupdraft.com

= 4.2.2 - 02/June/2025 =

* FIX: Cache - Resolved unwanted output in WP-CLI and fatal error related to WooCommerce's country-specific files, introduced in v4.2.0
* TWEAK: Premium - Cache - Compatibility with WordPress 6.8

= 4.2.1 - 05/May/2025 =

* FIX: Cache - Compatibility issue with other plugins due to late start of output buffering
* TWEAK: Improved array handling in `get_active_plugins()`, potentially avoiding edge-case fatal error

= 4.2.0 - 01/May/2025 =

* SECURITY: On multisite installs (only), a logged-in site administrator could use an unsanitised parameter to inject unwanted content into SQL queries. Thanks to Marc Montpas for the responsible disclosure.
* FEATURE: Premium - Replace YouTube Iframes with preview images to improve page speed
* FIX: Fix conflict with the WPML plugin
* FIX: Smush - Fixed PHP warning on the Media Library page
* FIX: Smush - Fixed issue where the Smush popup would freeze
* FIX: WebP images not served after WP-Optimize reactivation
* REFACTOR: Smush option removed from media upload modal
* TWEAK:  Update advert banner logos, texts and links
* TWEAK: Add missing separator between compression items in media library
* TWEAK: Avoid PHP warning thrown by Page Speed Ninja plugin
* TWEAK: Cache - Start caching after plugins loaded 
* TWEAK: Fix PHP deprecation warning in PHPSQLParser for PHP 8.4
* TWEAK: Fix deprecation warning in Updraft_Logger class for PHP 8.4
* TWEAK: Fixes absence of checkbox to remove all transients
* TWEAK: Premium - Support and feedback links in Help tab now point to getwpo.com

= 4.1.1 - 05/Mar/2025 =

* FIX: Page builders not working with Delay JS option enabled

= 4.1.0 - 03/Mar/2025 =

* FEATURE: Premium - Improve performance by caching Gravatar images locally.
* FIX: Premium - Unused images - Fixed warnings when moving non existing image to trash

= 4.0.1 - 17/Feb/2025 =

* FIX: File system usage issue

= 4.0.0 - 10/Feb/2025 =

* FEATURE: Delay JavaScript execution 
* FIX: Cache - Fixed PHP warning "Cannot modify header information"
* FIX: Minify - Unusual behavior occurs when the "Disable Google Fonts processing" option is enabled
* FIX: Smush - Fixed image compression actions in Media Library
* REFACTOR: Replacing jQuery Tablesorter with 'sortable-tablesort' package
* TWEAK: Cache - Enhance ActivityPub compatibility
* TWEAK: Fix PHP notice caused by subscriben plugin advert
* TWEAK: Minimum requirements were updated to PHP version 7.2 and WordPress version 4.9 
* TWEAK: Remove uses of `unserialize` without restriction of allowed_classes
* TWEAK: Recognise Independent Analytics Pro plugin tables in database optimization

= 3.8.0 - 09/Dec/2024 =

* FEATURE: Added a system status page
* FEATURE: Logs frequent and highly recurrent 404 requests; introduces a new Performance tab.
* FIX: Cache - Legacy Widgets visibility issue with WP-Optimize Cache enabled
* FIX: Cache - UI issue: Preload "Cancel" option is gone after reloading the WPO settings page instantly
* FIX: Database - optimizing any item also changes the status of other items
* REFACTOR: Minify - Removal of the WPO_MINIFY_PHP_VERSION_MET constant
* TWEAK: Add a warning message before deleting post metadata or orphaned relationship data.
* TWEAK: Bailout early if the minimum PHP version is not met
* TWEAK: Introduced logging for cache purge operations, available under `uploads/wpo/logs/cache-*.log`
* TWEAK: Open CRON overdue guide in new tab
* TWEAK: Persist Analytics Tab when minification is disabled
* TWEAK: Premium - Unused Images - Improved detection of images not present in the Media Library, marking them as used
* TWEAK: UI improvements in Analytics section
* TWEAK: Wrapped checkboxes inside `label` tags in the confirmation popup that appears when clicking the "Remove" button on the Database > Tables tab.

= 3.7.1 - 20/Nov/2024 =

* TWEAK: Resolved a PHP notice caused by translation loading too early when caching is enabled, introduced in WordPress 6.7

= 3.7.0 - 21/Oct/2024 =

* FEATURE: Added an option to automatically preload URLs immediately after cache content is purged
* FEATURE: Premium - Gather data about table usage by filtering `query` event
* FIX: Cache - Scheduled preloading wasn't working
* FIX: Inconsistency in `smush_manager_send_command` function
* REFACTOR: Smush - Popup styles, remove unused code 
* TWEAK: Fix fatal implode error when updating to v3.5.0
* TWEAK: Image compression - Issue with cancelling smush image compression
* TWEAK: Improve module minification logic
* TWEAK: Premium - Unused images - Fixed popup when moving images to or restoring images from the trash
* TWEAK: Premium - Unused images - Placeholder images in unused images section
* TWEAK: Added `security.md` file with information to report security issues

= 3.6.0 - 12/Sep/2024 =

* FEATURE: Premium - Auto-detect images lacking dimension attributes and add them to improve CLS
* FIX: Fixed the issue that disabled WebP conversion due to checking all shell commands for WebP compression
* FIX: Premium - Unused Images - The unused image size deletion functionality does not work when images are not in the /yyyy/mm/ folder
* REFACTOR: Removed unnecessary static methods in WebP class
* TWEAK: Image compression - Rolled back to using popup error notices as in versions prior to 3.4.0
* TWEAK: Added a more descriptive error with resolution proposals for failed gzip compression and browser cache tests
* TWEAK: Fix broken unused image list thumbnails and download as csv link in Multisite
* TWEAK: Fix the singleton pattern in Heartbeat class
* TWEAK: Image compression functionality added to the Media Library page
* TWEAK: Premium - Cache - Added support for Aelia Currency Switcher plugin
* TWEAK: Premium - Unused images - improve clarity in UI for images in post revisions
* TWEAK: Added additional checks to the `implode()` function to mitigate the risk of fatal errors on certain instances

= 3.5.0 - 14/Aug/2024 =

* FEATURE: Premium - Host Google and minimal analytics scripts locally
* FIX: Premium - Cache - Single page cache purge/preload feature isn't working 
* TWEAK: Add logging for the WebP feature
* TWEAK: Allow minification of script modules
* TWEAK: Cache - Purge the cache when the site is migrated 
* TWEAK: Improvements to asset minification cache logic
* TWEAK: Improvements to reSmushIt curl error message
* TWEAK: Minify - Added an option to disable Google Fonts processing when it causes conflicts with other plugins
* TWEAK: Move all WPO files from the `uploads` folder to `uploads/wpo`
* TWEAK: Style improvement of the loading modals

= 3.4.2 - 03/Jul/2024 =

* FIX: Removes unnecessary heartbeat calls for retrieving information about images

= 3.4.1 - 26/Jun/2024 =

* FIX: Issue with bulk editing on the posts and pages edit screen

= 3.4.0 - 25/Jun/2024 =

* FEATURE: Premium - Smush - Bulk compress / restore from media library
* FIX: Deactivate the form for minifying JS/CSS settings when the corresponding option is disabled
* REFACTOR: The functionality for the 'Unused Images' feature in ACF has been moved to a separate class
* TWEAK: Add UpdraftCentral commands for the latest WP-Optimize features
* TWEAK: Adjusted the scheduled preload time for improved performance
* TWEAK: Auto-update advanced-cache.php settings during site migration
* TWEAK: Cache - Human-readable file names for the cache directory
* TWEAK: Caching related cron jobs are activated even though cache is disabled
* TWEAK: Image compression - Updated message for restoring images action
* TWEAK: Implement Heartbeat API for image compression progress updates
* TWEAK: Improving vendor autoload
* TWEAK: Introduces a hook (`wpo_force_webp_serve_using_altered_html`) for changing WebP serving method
* TWEAK: Minify - Exclude .min files from minification
* TWEAK: Minify - Improve list of processed files UI
* TWEAK: Optimization of the get_uncompressed_image query
* TWEAK: Persist script loading strategy when minifying JS files
* TWEAK: Premium - Compatibility with Curcy WooCommerce multi currency plugin
* TWEAK: Premium - Unused Images - Added an option to delete original images when scaled versions exist

= 3.3.2 - 16/Apr/2024 =

* FIX: Ensure the admin bar is not cached when caching is enabled for both logged-in and guest users
* REFACTOR: Remove unused code
* TWEAK: Cache - Prevent sitemaps being cached
* TWEAK: Display a notice when static browser cache is enabled but not working
* TWEAK: Premium - Added "Lost your password?" link on plugin's page
* TWEAK: Premium - Unused images - Detect Elementor's 'Video' widget's image
* TWEAK: Recognise Rank Math plugin tables as used in database optimization
* TWEAK: Reduce .htaccess file write operations when WebP is enabled
* TWEAK: Seasonal notice content update for 2024 
* TWEAK: Unused Images - Unused tab displays multiple images for compressed images with WebP Conversion
* TWEAK: Prevent multiple AJAX requests being generated by repeated clicks on the "Purge Cache" button
* TWEAK: Call the `litespeed_finish_request()` function when attempting to close browser connection on LiteSpeed servers

= 3.3.1 - 06/Mar/2024 =

* FIX: Cache - Compatibility issue with Jetpack's infinity scroll feature
* FIX: Cache - Don't cache activity stream (ActivityPub plugin compatibility)
* FIX: Cache - Page not cached comment is added to `robots.txt`
* TWEAK: Fix PHP warnings when server variables are not available
* TWEAK: Fix Unexpected response alert and PHP warning when cache preloading is triggered manually
* TWEAK: Migrate from setInterval to WP heartbeat API to refresh information about backend tasks
* TWEAK: Optimization of the WebP Implementation
* TWEAK: Update dashboard notice to include all of our plugins
* TWEAK: Update the footer review prompt

= 3.3.0 - 31/Jan/2024 =

* FEATURE: Premium - Ability to preload and purge caches from individual post/page
* FIX: Premium - Unused Images - Recognise Elementor's Container, and Section widget background images
* FIX: Avoid having repeated minified scripts in the same bundle, it breaks the code in some specific cases
* FIX: Cache - TranslatePress compatibility - Post updates purges cache for all related translated languages
* FIX: Only try to parse canonical URLs if there is a path or querystring, needed for WPML with multi-domain compatibility
* TWEAK: Add cron de-scheduling of all wpo_* events during plugin uninstall
* TWEAK: Cache - Always add source code comment about page not being cached, but only add details when WP_DEBUG is ON
* TWEAK: Cache - Fix issue with excluding encoded (non-latin) URLs
* TWEAK: Do not attempt to close browser connection when the context is not an AJAX action
* TWEAK: Minify - Logging more information about why minify static assets cache gets invalidated and regenerated
* TWEAK: Revert to the original `matthiasmullie/minify` repository after confirming resolution of previous issues
* TWEAK: Setup Cron job to clear failed smush tasks from DB
* TWEAK: Using clear text user agent strings instead of regular expressions to identify web browsers for improved clarity
* TWEAK: Updater library in the Premium version updated to the current release series

= 3.2.22 - 23/Nov/2023 =

* TWEAK: Cache - Show a notice in the admin if the config file is missing and caching is enabled
* TWEAK: Added support for new emoji styles related hooks introduced in WordPress 6.4
* TWEAK: Database - Fix "Optimize database tables" stuck loading state
* TWEAK: Premium - Cache - Style improvement for the select2 box from advanced cache settings
* TWEAK: Premium - Images - Fix issues with avif images in the unused images feature
* REFACTOR: Wrapping most of the external links in the WPO settings pages with the appropriate function
* REFACTOR: Remove unused code

= 3.2.21 - 18/Oct/2023 =
* FIX: Prevent PHP fatal error when updating from older versions of WP-Optimize

= 3.2.20 - 16/Oct/2023 =

* FIX: WebP - Performance issue because of possible infinite loop
* FIX: Cache purging occurred prior to the cache lifespan expiration
* FIX: Premium - Smush - Do not consider images in trashed posts as unused
* TWEAK - Remove extra slash from plugin asset urls and paths
* TWEAK: Image - Add a tooltip next to the restore button on the edit media screen
* TWEAK: Premium - Prevent PHP deprecated warning when generating variations from attributes for new WooCommerce variable products
* TWEAK: Premium - Purge cache when the `Variation Swatches for WooCommerce` plugin settings get updated
* TWEAK: Premium - Settings - Style improvement for the `Purge cache permissions` select2 box
* TWEAK: Recognise LearnDash plugin tables in database optimization
* TWEAK: Remove empty `uploads/.htaccess` file and remaining cron events
* TWEAK: Smush - Disable server info in smush logs by default
* TWEAK: Smush - Resolve double log entries when compressing a single image from the media library metabox
* TWEAK: Prevent unwanted PHP notice upon update

= 3.2.19 - 15/Sep/2023 =

* FIX: Cache - Relevant caches are now purged upon updating homepage display settings and posts per page settings
* FIX: Minify - Multiline content inside textareas break after exporting and importing settings
* FIX: Smush - Images are not compressed with default (image quality = 100) settings
* FIX: Premium - Cache - Caching stops working when WordPress salt keys contain backslash (\) character
* FIX: Premium - User per role cache not working when tables do not have `wp` prefix
* FIX: Premium - When lazy loading is enabled, the picture tag in initial viewport is not visible
* TWEAK: Fixed date format and timezone in the cache last modification comment according to the site configuration
* TWEAK: Fixed spelling errors in the repository 
* TWEAK: Minify - The process of purging cache for 3rd party caching solutions now works properly when multiple other solutions are present
* TWEAK: Premium - Lazy load - Added Jetpack, Optimole, Rocket Lazy Load, and Smush (WPMU Dev) plugins to the incompatibility notice
* TWEAK: Prevent PHP warning upon installing themes from the WordPress repository
* TWEAK: Update the composer package yahnis-elsts/plugin-update-checker for PHP 8.2 compatibility

= 3.2.18 - 11/Aug/2023 =

* FIX: A bug in the v3.2.17 release that caused certain database optimization buttons to be disabled has been fixed
* TWEAK: Reset WebP serving method upon updating to version 3.2.18

= 3.2.17 - 08/Aug/2023 =

* FIX: Automatically compress newly-added images feature now works on multisite in case of attachment ID is the same in both sites
* FIX: Minify - No separate try-catch blocks for same handle
* FIX: Premium - Unused Images - Recognise Elementor Carousel, Slides, Flip Box, and Site logo widget images
* FIX: Premium - Prevent memory exhausted PHP fatal error when using unused images feature with Elementor
* TWEAK: External links will open in new tab/window
* TWEAK: Remove `htaccess-capability-tester` dependency
* TWEAK: Remove residue folders in `uploads/wpo`

= 3.2.16 - 06/Jul/2023 =

* FIX: HTML minify should not remove `title` tag added by AIOSEO
* FIX: Premium - Fetching unused images data is incorrect when previous task queue is not properly unlocked
* FIX: Premium - Unused Images - Recognise Elementor background images
* TWEAK: Premium - Prevent conflicts between the minify feature and the `YITH Point of Sale for WooCommerce` plugin
* TWEAK: Premium - Compatibility issue with Smart Slider 3
* TWEAK: Suppress PHP warnings caused by WebP converter
* TWEAK: Database optimization - Prevent duplicate AJAX requests, minor code improvements
* TWEAK: Smush - Add a cron job to run pending image compressions, ensuring completion of the process even if bulk image compression encounters interruptions or failures
* TWEAK: Clean up files on uninstall
* TWEAK: Added compatibility for `Custom Permalinks` plugin
* TWEAK: If minifying is enabled, then check that the purge cron event exists (not only upon plugin activation)
* REFACTOR: Premium - Unused Images - Separate classes for Beaver Builder, Estatik, and Yoast SEO plugins
* FIX: Premium - WP CLI commands permission issues solved

[See changelog for all versions](https://plugins.svn.wordpress.org/wp-optimize/trunk/changelog.txt).

== Upgrade Notice ==
* 4.5.3: A security risk fix - a recommended update for all
