This is an old revision of the document!


Summary

For example, assume the following code in one WordPress plugin is some private info in one page.

<syntaxhighlight lang='php'> function show( $id ) {

  return "ID: $id <a href='test?nonce=$nonce'>Click Me</a>";

}

echo show(35); </syntaxhighlight>

With LSCWP ESI API, it can be changed to this: <syntaxhighlight lang='php'> function show( $id, $from_esi = false ) {

  // To make sure it is the original call
  if ( ! $from_esi ) {
      // To make sure LSCWP ESI is on
      if( method_exists( 'LiteSpeed_Cache_API', 'esi_enabled' ) && LiteSpeed_Cache_API::esi_enabled() ) {
          // To make sure is using the compatible API version
          if ( method_exists( 'LiteSpeed_Cache_API', 'v' ) && LiteSpeed_Cache_API::v( '1.2.4' ) ) {
        $params = array( 'id' => $id ) ;// If you have any parameters want to pass
              // Let's turn this block to ESI by returning directly
        return LiteSpeed_Cache_API::esi_url( 'my_plugin_esi', 'My Plugin Name', $params ) ;
          }
}
  }
  return "ID: $id <a href='test?nonce=$nonce'>Click Me</a>";

}

echo show(35); </syntaxhighlight>

And then, in your main process, hook the ESI call to the real content: <syntaxhighlight lang='php'> if ( method_exists( 'LiteSpeed_Cache_API', 'esi_enabled' ) && LiteSpeed_Cache_API::esi_enabled() ) {

  LiteSpeed_Cache_API::hook_tpl_esi('my_plugin_esi', 'hook_esi' );

}

function hook_esi( $params ) {

  $id = $params[ 'id' ] ;
  echo show( $id, true ) ;

} </syntaxhighlight>

Example

Let's take Caldera Forms Version 1.5.6.1 as a sample. 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 <syntaxhighlight lang='php'>

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;
}

</syntaxhighlight>

to

<syntaxhighlight lang='php'>

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.2.4' ) ) {
				$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 ;
}

</syntaxhighlight>

Then go to `caldera-forms/classes/core.php`, in `function __construct()` line 146 or other preferred position, add this: <syntaxhighlight lang='php'>

	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' );
	}

</syntaxhighlight>

Now Caldera Forms can be perfectly cached with ESI on.

  • Admin
  • Last modified: 2017/09/24 13:59
  • by Hai Zheng