お問い合わせはコチラから

litespeed-cacheでPHPの一部をキャッシュ除外する方法

サイト運営

最近、Litespeedを使っているサイトが増えてきています。例えば、mixhostやcolorfullbox、ロリポップのハイスピードプランなどです。Litespeedを使っているサイトではLitespeed cacheというキャッシュプラグインが使えます。

LiteSpeed Cache
オールインワンの無敵の高速化 PageSpeed を改善:キャッシング、画像/ CSS / JS を最適化...

このプラグインは便利なのですが、なんでもキャッシュしてしまうので動的なコンテンツが更新されなくなります。

部分的にキャッシュしないようなディレクティブがあるのかと調べましたが、ありませんでした。

ESIという仕組みを使うと部分キャッシュ除外を実現できましたので、ご紹介いたします

キャッシュから除外した方が良い場合

訪問者ごとに表示内容が異なり、かつ、リアルタイム性が強い部分は、キャッシュしてしまうと意味がなくなります。

例えば、最近見た記事などは、ユーザーごとに違いますし、サイトを回遊している間は常に更新されるべき内容です。

記事のランキングなどは、全体キャッシュと同じ管理でパージするのであれば除外する必要はないです。

ESIを使うと部分キャッシュ除外が実現できる

litespeed cacheでは、ESIという仕組みがあります。ESIを使うと、ウィジェットやショートコードはキャッシュ対象から除外できます。

ESIを設定から有効にする

litespeed cahceのESI設定からESIを有効化します。

widgetでESI設定からキャッシュ対象から除外する

ESIを有効化するとウィジェットにESIの設定項目が追加されるので、非公開にしてttlを0にすればそのウィジェットの出力はキャッシュから除外されます。

ショートコードをESIでキャッシュから除外する

キャッシュしたくないPHPをショートコードとして定義します。もとからショートコードの場合は特に何もしなくてよいです。

以下は、hogehogeというショートコードを呼び出して、キャッシュしない時の例です。

先頭にesiをつけて、後ろに、cache=”private” ttl=”0″をつければOKです。

<?php 
do_shortcode('[ esi hogehoge cache="private" ttl="0"]');

PHPコードの一部をキャッシュから除外する

PHPコードの一部をキャッシュから除外したいことが多いと思います。そのPHPの一部をショートコード化したり、ウィジェットにすれば今まで説明した方法で対応できます。

しかし、そんな方法は面倒すぎて耐えられません。

公式にPHPコードの一部をESIブロックにする方法が書かれていました。

API | LSCache for WordPress | LiteSpeed Documentation
LiteSpeed Cache for WordPress API hook reference.

WordPressに慣れていないとかなりわかりにくいのですが、基本そのままコピペして書き換えれば大丈夫です。

パラメータを渡さない例

<?php
add_action( 'litespeed_esi_load-my_esi_block', 'my_esi_block_esi_load' );

function my_esi_block_esi_load()
{
//do_action( 'litespeed_control_set_ttl', 300 );
do_action( 'litespeed_control_set_nocache' );
echo "Hello world".rand (1,99999);
}
some_code_here
<div>
<?php
echo apply_filters( 'litespeed_esi_url', 'my_esi_block', 'Custom ESI block' );
?>
</div>
some_code_here

パラメータを渡す例

公式の例だとパラメータを渡すことができないので、以下のようにすればパラメータを渡すことができました。

ただし、パラメータを渡すときは、パラメータによって動作が変わるような処置は、パラメータがキャッシュされている場合、うまくいかないと思います。

通常の使用ではパラメータを渡して動きを変えるという使い方はしないのかもしれません。ESIブロックの中で閉じて動きを変えられるようにブロックの切り口を考える必要があります。

some_code_here
<div>
<?php
		$params = array(
			'meta_titles' => $meta_titles,
			'terms' => $terms
		) ;
echo apply_filters( 'litespeed_esi_url', 'my_esi_block', 'Custom ESI block',$params );
?>
</div>
some_code_here
<?php
add_action( 'litespeed_esi_load-my_esi_block', 'my_esi_block_esi_load' );

function my_esi_block_esi_load($params)
{
// $params['terms']['term_id']とかで参照する

//do_action( 'litespeed_control_set_ttl', 300 );
do_action( 'litespeed_control_set_nocache' );
echo "Hello world".rand (1,99999);
}

不要なコメントを出力しない設定

litespeed cacheはHTMLコメントを結構出力してきます。ショートコードの場合にもコメントがくっついてくるので、それが邪魔になる場合は以下の設定で出力OFFにできます。

add_filter( 'litespeed_comment', '__return_false' );
if ( ! defined( 'LSCACHE_ESI_SILENCE' ) ) {
	define( 'LSCACHE_ESI_SILENCE', true );
}

通常、上記の設定で消えますが、ショートコードを呼び出すタイミングによってはコメント出力が止まりません。

その場合は最終手段で、すべて出力した後にHTML上でコメントを削除します。

// the_content置換
function call_back($buffer) {
	
$outtxt = do_shortcode('[esi hogehoge cache="private" ttl="0"]');
$outtxt = preg_replace('/<!--[\s\S]*?-->/s', '', $outtxt);

$buffer = preg_replace('/https:\/\/www\.xxxx\.com\/mail\//s',
						 $outtxt,$buffer); //HTML出力で置き換える処理
	return $buffer;
}
function buf_start() { 
	ob_start("call_back"); 
}
function buf_end() { 

}
if(!is_admin()){
add_action('after_setup_theme', 'buf_start');
add_action('shutdown', 'buf_end');
}

まとめ

この記事は、Litespeed cacheの部分キャッシュ除外の方法についてご紹介しました。おそらく必要な場面は結構あると思います。

この記事を書いた人
ブーン

はるばる日本よりオランダ王国へやってまいりました。
自分の経験が少しでも参考になれば嬉しいです。
お問い合わせは、『こちら』からお願い致します。

\ブーンをフォロー/
スポンサーリンク
サイト運営
\シェアお願いします!/
\ブーンをフォロー/
こんな記事も読まれています

失敗しないレンタルサーバーランキング

mixhost

不正アクセスに強くて使いやすいおススメサーバー
\本サイトで利用中/
メリット①:自動ウィルス駆除対応
メリット②:サイトの表示速度が速い!
メリット③:転送量の上限が多い!
メリット④:自由にプラン変更ができ、アクセス増にも対応できる!
メリット⑤:バックアップデータが無料で復元できる!
メリット⑥:Wordpressが簡単にインストールできる!
メリット⑦:どのプランでも初期費用が無料!
メリット⑧:10日間の無料お試し期間と30日の返金保証!

Conoha Wing

国内Wordpress最速の最強サーバー
メリット①:圧倒的な表示速度
メリット②:レンタルサーバーと独自ドメインがセットでお得◎
メリット③:プラン変更はすべてのプランで自由自在
メリット④:一か月の利用転送量の制限が緩い(9TB~)
メリット⑤:WordPresサイトの移行が簡単

エックスサーバー

国内シェアNo1の安定性と実績が魅力。ALL SSDで死角なしの万能サーバー。
メリット①:サイトの表示速度が安定して速い!
メリット②:アクセス負荷に強くて安定性が高い!
メリット③:24時間365日の充実サポートで安心!電話サポートもあり!
メリット④:転送量が多い!
メリット⑤:自動バックアップ機能付き!
メリット⑥:WordPressが簡単にインストールできる!
メリット⑦:10日の無料お試し期間がある!

タイトルとURLをコピーしました