wordpressでタグのキャッシュがクリアできない

wordpressでタグのキャッシュがクリアできない。
キャッシュはobject-cache.phpというmemcachedを利用するやつ。

clean_object_term_cache()を利用してるんだけどうまく動かない。
調べてみると
clean_object_term_cache() -> wp_cache_delete() -> wp_object_cache->delete() (object-cache.phpのインスタンス) という道順らしい。

でもwp_cache_delete()に到達していない。
見たら

function clean_object_term_cache($object_ids, $object_type) {
if ( !is_array($object_ids) )
$object_ids = array($object_ids);
foreach ( $object_ids as $id )
var_dump( get_object_taxonomies($object_type));
foreach ( get_object_taxonomies($object_type) as $taxonomy ){
var_dump($taxonomy);
wp_cache_delete($id, "{$taxonomy}_relationships");
}

do_action('clean_object_term_cache', $object_ids, $object_type);
}

at taxonomy.php

となっていて、二つ目のforeachがうまく回ってないみたい。ここのget_object_taxonomies()が空の配列を返してきてる。

該当箇所は

function get_object_taxonomies($object) {
global $wp_taxonomies;
//var_dump($wp_taxonomies);
if ( is_object($object) ) {
if ( $object->post_type == 'attachment' )
return get_attachment_taxonomies($object);
$object = $object->post_type;
}

$object = (array) $object;

$taxonomies = array();
foreach ( (array) $wp_taxonomies as $taxonomy ) {
if ( array_intersect($object, (array) $taxonomy->object_type) )
$taxonomies[] = $taxonomy->name;
}

return $taxonomies;
}

at taxonomy.php

ここでwp_taxonomiesが初期化されてないことに気付く。初期化するためにはcreate_initial_taxonomies()を実行すれば良いらしい。実行して回してみるけどやっぱりダメ。

色々と探していたところ、clean_object_term_cache()の引数が間違っていた模様。

第一引数はpost_id、第二引数がクリアしたいtaxonomyの名前だと思ってた。post_tagとかcategoryとか。

でもそうじゃなくて、wp_taxonomiesに入ってる各種taxonomyのオブジェクトの、object_type、これってpostとかが来るらしい。

で、postにしたらうまくいった。

updateするやつもあったけど、これはキャッシュが存在しないときに作成するだけの機能らしい。注意。

コメントを残す