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 = '';
$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 = '';
$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.