WordPressでは、transientを使ってPHP出力をキャッシュするとサイトの表示速度が高速化します。
SWELLでは何でもかんでもtransientでキャッシュすることで高速化しています。
transientは結果をキャッシュしてしまうので、サイトの表示がすぐに更新されないため、必要に応じてtransientをいちいち削除する必要があります。
特定のtransientを削除するdelete_transient()関数がありますが、この関数はkeyの指定が必要です。
transientのkeyは、特定の文字列とmd5()と組み合わせて使うのが普通なので、特定の文字列を含むtransientだけ一括で削除したい時に、keyを正確に指定しなければならないdelete_transient()関数だと使い勝手が悪いと思っていました。
transientは、名前に規則がありますので直接SQLを叩けば削除することができます。
この記事でメモしておきます。
<?php
//prefixを含むtransientを削除
//$transient_key="prefix_".md5($hoge)
// wp_optionsはdbの接頭辞がwp_の場合なので、適宜変更
function delete_transient_prefix($prefix){
global $wpdb;
$wpdb->query("delete from `wp_options` where `option_name` like '%_transient_".$prefix."_%'");
}
//すべてのtransientを削除
function delete_transient_all(){
global $wpdb;
$wpdb->query("delete from `wp_options` where `option_name` like '%_transient_%'");
}