Note: LiteSpeed WordPress Cache plugin needs to be v1.3+.
Let's take Caldera Forms Version 1.5.6.1 as the example.
In
caldera-forms/classes/render/nonce.php
line 86
public static function nonce_field( $form_id )
is where the form nonce is generated. So to convert it to ESI, change
public static function nonce_field( $form_id ){ $nonce_field = '<input type="hidden" id="' . esc_attr( self::nonce_field_name( $form_id ) ) . '" name="' . esc_attr( self::nonce_field_name() ) . '" value="' . esc_attr( self::create_verify_nonce( $form_id ) ) . '" data-nonce-time="' . esc_attr( time() ) . '" />'; $nonce_field .= wp_referer_field( false ); return $nonce_field; }
to
public static function nonce_field( $form_id, $from_esi = false ){ if ( ! $from_esi ) { if ( method_exists( 'LiteSpeed_Cache_API', 'esi_enabled' ) && LiteSpeed_Cache_API::esi_enabled() ) { if ( method_exists( 'LiteSpeed_Cache_API', 'v' ) && LiteSpeed_Cache_API::v( '1.3' ) ) { $params = array( 'form_id' => $form_id ) ; return LiteSpeed_Cache_API::esi_url( 'caldera_forms', 'Caldera Forms', $params ) ; } } } $nonce_field = '<input type="hidden" id="' . esc_attr( self::nonce_field_name( $form_id ) ) . '" name="' . esc_attr( self::nonce_field_name() ) . '" value="' . esc_attr( self::create_verify_nonce( $form_id ) ) . '" data-nonce-time="' . esc_attr( time() ) . '" />'; $nonce_field .= wp_referer_field( false ); return $nonce_field; } /** * Handle ESI request * */ public static function hook_esi( $params ) { $form_id = $params[ 'form_id' ] ; echo self::nonce_field( $form_id, true ) ; exit ; }
Then go to
caldera-forms/classes/core.php
, in
function __construct()
line 146 or other preferred position, add this:
if ( method_exists( 'LiteSpeed_Cache_API', 'esi_enabled' ) && LiteSpeed_Cache_API::esi_enabled() ) { LiteSpeed_Cache_API::hook_tpl_esi( 'caldera_forms', 'Caldera_Forms_Render_Nonce::hook_esi' ); }
Now Caldera Forms can be perfectly cached with ESI on.