超簡単操作のAPCu キャッシュクリア【WordPress】

APCu オブジェクトキャッシュを使ってるとキャッシュを消すのに手間が掛かります。それを簡単に行う小技、毎度馬鹿馬鹿しいお話で恐縮です。

馬鹿馬鹿しいお話とお断りして、では前置きから行きます。

オブジェクトキャッシュとそのクリア

まず APCu オブジェクトキャッシュですが、APCu Object Cache Backend という部品を使って実現しています。

https://downloads.wordpress.org/plugin/apcu.1.0.2.zip をダウンロードして、コードの最初に

if ( is_admin() ) { return false; }

を追加してadmin で無効化してからwp-content 内にphpファイルを置くことでキャッシュが効きます。

が、キャッシュをクリアできません。クリアの仕組みを作らないといけません。クリア自体は PHP の関数を使います。

apcu_clear_cache()

これを仕込んだHTML的な独立したページを作って、そのURLをブラウザで開くことでキャッシュがクリアされるようにしました。

それだけだとまだ面倒なので、他人様の作ったコードを半パクリして、WordPress 管理画面でポストを保存したらその時点でクリアされるコードを functions.php に仕込みます。

function my_save_post($post) {
    apcu_clear_cache();
}
add_action('save_post', 'my_save_post');

’save_post’ により、ポストを保存したタイミングで発動します。

この関数はいい感じですが、’save_post’ が効くのが限定的なので、クリアされないこともまだまだ多く残ります。

また、そもそもキャッシュクリアの独立したページを開くやり方が全く気に入りません。

もうちょっとましなやり方はないのんか。と、ポクポク考えて思いついたのが次の小技です。

オブジェクトキャッシュの便利なクリア

とりあえずこれまで使っていた独立したページを辞めます。その代わり、WordPress のテーマの中にテンプレファイルをひとつ作りましょう。

クリアキャッシュをテンプレートファイルとして仕込む

apcu-cache-clear.php というそれらしい名前のファイルを作って、次の簡単なコードを書いて保存しました。

<?php apcu_clear_cache(); ?>
<p>APCu cache cleared.</p>
<p><input type="button" onclick="window.history.back();" value="もどる"></p>

単刀直入にこれだけです。最初にPHPのクリア関数、一言テキスト書いて、最後 input タグで javascript の「もどる」ボタンを設置しております。HTMLの独立したページを作るより断然シンプル。

固定ページに仕込む

apcu-cache-clear.php を固定ページに仕込みます。

その前提として、ショートコードで PHP ファイルを読み込む仕掛けが必要でした。あまりにも以前から仕込みっぱなしなので存在が当たり前になってました。この仕組みを作っていない人向けに一言説明しておきます。以下を functions.php に書きます。

function php_file_Include($params = array()) {
	extract(shortcode_atts(array(
		'file' => 'default'
		), $params));
	ob_start();
	include(STYLESHEETPATH . "/$file.php");
	return ob_get_clean();
}
add_shortcode('php', 'php_file_Include');

[  php file = ‘テーマからの相対パス’  ] と、ショートコードを書くことで php ファイルをどこにでも読み込めます。

固定ページをひとつ作って、apcu-cache-clear.php をショートコードで読み込み、非公開で公開します。

APCu キャッシュをクリアする非公開ページ
非公開のキャッシュクリアページ。これを開いたらキャッシュがクリアされる

Widget に仕込む

さてこれだけで済ましません。このページを開くメニューを作り、それをウィジェットに表示させます。

おっとまた前提を忘れてた。ウィジェットの表示非表示を管理する Widget Logic という古いプラグインを使用しています。他の同じ目的のプラグインがあるのかどうか知りません。ざっと探したところ面倒くさそうなのが一つヒットしたくらいで良い代替が見つからないので Widget Logic、古いけど使い続けてます。

Widget Logic でログインしてる人間にだけ表示するようにしておきます。is_user_logged_in() です。

is_user_logged_in を設定したwidget
ログイン中にだけ表示される設定

このwidgetを最も手を伸ばしやすい場所に配置します。

以上です。

カスタマイズ中、テンプレファイルやCSSを弄ってるとキャッシュクリアをすごい頻度で行います。生半可な簡単操作では我慢ならないので、我ながらこれは良くやったなと。たとえ APCu Manager などのプラグインが正しく動いていたとしても、ここまでかんたん操作でキャッシュクリアできることはちょっとないです。

そんなこんなで、馬鹿馬鹿しい小技のお話にお付き合いありがとうございました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください