Advanced Taxonomy Terms Order で保存した時に W3 Total Cache のキャッシュを消去したい
WordPress のサイトヘルスに「永続オブジェクトキャッシュを使用してください」に対応するために、キャッシュプラグインを Fastest Cache から、W3 Total Cache に変更。
さくらインターネットは APCu という機能がオンになっているので、ディスクキャッシュとオブジェクトキャッシュの設定ページでそれを選択。
Fastest Cache の時には気がつなかったけど、タクソノミーのタームの順番を入れ替えて保存(更新)した時に自動的にキャッシュが消去されないことに気がついた。
更新時にフックさせてキャッシュを消去することにした。
Post Type Order の方は公式ドキュメントにアクションフックがあったけど、Taxonomy Terms Order の方は無かった。
プラグインのソースを見てみると atto/update-order-completed と atto/update-order-default-interface という do_action() があったので、それにフックしたらタクソノミーのタームの順番入れ替え時にキャッシュを消去することができた。
// functions.php
function custom_clear_cache_w3tc()
{
if (! function_exists('w3tc_flush_all')) {
return;
} else {
w3tc_flush_all();
}
}
// Advanced Post Type Order フック
add_action('apto/reorder-interface/order_update_complete', 'custom_clear_cache_w3tc');
add_action('apto_object_order_update', 'custom_clear_cache_w3tc');
add_action('APTO/default-interface/order_update_complete', 'custom_clear_cache_w3tc');
// Advanced Taxonomy Terms Order フック
add_action('atto/update-order-completed', 'custom_clear_cache_w3tc');
add_action('atto/update-order-default-interface', 'custom_clear_cache_w3tc');あと Fastest Cache と違い「管理者権限」しかヘッダーに「キャッシュの消去」ナビが表示されないし、権限も無いようなのでちょっと困った。
「編集者権限」でもキャッシュの消去をできるようにしたい。
対策としては ACF でオプションページを作成し、そのオプションページを更新したらキャッシュを消去されるようにした。
// functions.php
function acf_options_page_clear_w3_total_cache($post_id)
{
$post_ids = [
'option',
'options'
];
if (! function_exists('w3tc_flush_all')) {
return;
}
if (in_array($post_id, $post_ids)) {
w3tc_flush_all();
}
}