wordpressでpermalinkがおかしくなった

wordpress 2.9.2 でpermalinkがおかしくなった。

あるwordpressのサイトでマルチサイト(っぽい)ことをやっているんだけど、このそれぞれのサイトでのURLが混同されちゃった。

ソースコードを追いかけてみたけど、イマイチはっきりしない。

関数の呼び出し順序は下記の通り

get_permalink() -> get_option(‘home’) -> get_option(‘siteurl’) => wp_load_alloptions() -> wp_cache_get(‘alloptions’, ‘options’) -> $wp_object_cache->get(‘alloptions’, ‘option’)

最後の$wp_object_cacheはobject_cache.phpを利用しているのでその中のget()が呼ばれている。

ここまでたどったけどすべての戻り値でおかしいほうのブログのURLが返されてた。

ここで中のmemcacheのデータを確認。

memcacheのデータを確認するのって面倒なので以前に利用したコードを利用する。

このとき対象となるキーは “1options:alloptions” だった。

wp_cache_get()とかwp_object_cache->get()の引数にもある “alloptions, options”ってのがmemcacheのキーの後ろ側らしい。前にある2ってのはブログID。

今回の問題では複数のブログ、 ブログ1, ブログ2, ブログ3ぐらいまであって、そのうちのブログ1のキャッシュデータにブログ2のデータが上書きされてた。

ブログ3ではそのまま正しいデータが書かれていた。

該当するコードは過去にも見てたけどこれまでは普通に分割できてたはず。

 

ひとまずmemcacheデータを消してみる。データが存在しないときはたしか自動でDBサーバへクエリを投げて取りに行ってくれた気がするので。

消したら直ったような気がした。

コメントを残す