Prevent supported caching and JS optimization plugins breaking Gravity Forms.
Caching is great for scenarios where your post or page content it’s not changed frequently, but if you have a form embedded to which you do changes very often or you’re using dynamic code, that doesn’t run for a cached page, or using third-party solutions relaying in dynamic live data (e.g. reCAPTCHA), using caching in these cases is going to cause issues. The same applies to certain automatic JS optimizations done by caching plugins that are known to break JS execution easily.
An easy solution is to configure your caching plugin or proxy to exclude the page where the form is embedded, but you need also to remember this when you create a new page or embed a new form in an existing page…
This plugin will take care of the above automatically doing the following:
If you’re not using any of the above embedding methods you can still use Fresh Forms with a filter to pass the ID number of the posts where you want to run Fresh forms. You can also make Fresh Forms to add a cookie when a form is detected to use this cookie as a way to skip caching for hosts using Varnish based caching. Please see FAQ for more details.
There’s no options page. Only the plugin version is saved to the database to be able to handle actions after an update when needed, no other data is stored.
It should work with any caching plugin with support for DONOTCACHEPAGE constant, and proxies respecting the use Cache-Control HTTP header.
Caching and Optimization plugins supported:
Caching plugins NOT supported:
Cloudflare and other CDN/proxies:
This plugin will add appropriate HTTP header to pages with a Gravity Forms form to exlude the page HTML from caching when the web host setup allows it.
By default Cloudflare doesn’t cache the page HTML, it does only when you have configured it to “Cache Everything”. In this case, after activating the plugin, you need to purge cache in your Cloudflare account or wait for cache expiration to let Cloudflare know the page must be excluded from caching.
Certain hosts like WP Engine and Kinsta don’t allow HTTP headers modification from WordPress side of things, therefore Cloudflare support will not work for these hosts.
Other proxy services should work in a similar way, but I don’t have access to test any other proxy service. Feel to reach me if you want to provide me access to add support for your proxy service (documentation for the proxy would be required).
Note for these cases (caching is done by an external service), Fresh Forms can just include the HTTP header when your web host allows it. Once the header is added, it’s up to the CDN/proxy being used to obey the header and skip caching for the page.
Just install and activate. No settings required except for ACF support (see FAQ).
As stated on this plugin description it supports the LiteSpeed Cache plugin, NOT LiteSpeed server directly. So if you’re using a LiteSpeed based web host, you need to install LiteSpeed Cache plugin before installing Fresh Forms for Gravity.
ACF fields of the following types are supported as standalone fields and also as subfields of a Flexible Content or Repeater field: Text, Text Area, WYSIWYG. But this is disabled by default.
To enable ACF support go to the settings page at Forms > Settings > Fresh Forms.
Starting with Fresh Forms 1.5 you can add a list of pages or posts IDs where you would like to force Fresh Forms to run by going to Forms > Settings > Fresh Forms.
You could also add the freshforms_post_has_gform filter in your theme functions.php file or a custom fucntionatliy plugin to pass Fresh Forms an array containing the ID of the pages/posts where you want it to run without performing the usual automatic detection of forms.
The following example would exclude posts with ID 1 and 8:
add_filter( 'freshforms_post_has_gform', 'fffg_fresh_these_posts' ); function fffg_fresh_these_posts(){ // Force Fresh Forms to run for posts with id 1 and 8. return array( 1, 8); }
The following example would exclude WooCommerce products using a product category with the slug product-category-1
add_filter( 'freshforms_post_has_gform', 'fffg_fresh_these_products' ); function fffg_fresh_these_products( $post_has_form ){ global $post; // Run Fresh Forms for a WooCommerce product if it has one of the following categories slugs. $product_categories = array( 'product-category-1' ); if ( is_object( $post ) && 'product' === $post->post_type && has_term( $product_categories, 'product_cat', $post->ID ) ) { return array( $post->ID ); } // Otherwise. return $post_has_form; }
After doing the above, you need to flush your host/plugin and browser cache.
Fresh Forms targets only WordPress caching plugins, it doesn’t communicate with your server directly. If you have a WordPress installed to manage Varnish cache and this plugin has support for the DONOTCACHEPAGE constant, Fresh Forms should work out of the box.
But there are some WordPress plugins, like Breeze by CloudWays and NitroPack, that while they are created to integrate WordPress with Varnish, they don’t support DONOTCACHEPAGE or provide any WordPress filters to exclude content dynamically (at the time of writing this).
But both have support to exclude pages from their cache based on a cookie added. Since Fresh Forms 1.3.4, you can use the freshforms_add_cookie filter in your theme functions.php file or a custom fucntionatliy plugin to make Fresh Forms to add a cookie that you can configure in CloudWays or NitroPack account dashboard.
add_filter( 'freshforms_add_cookie', '__return_true' );
Once you have the filter added to your site, follow the instructions below.
CloudWays documentation: How to Include or Exclude Cookies From Varnish
Make sure you select Exclude for the Method, and use FreshForms for the cookie Value.
NitroPack documentation: Excluded Cookies
Use FreshForms for the Cookie Name and no-cache for the Cookie Values.
After doing the above, you need to flush your host and browser cache.
wp doctor check autoload-options-size
is used. Thanks to @bozzmedia for the report.