Multi-siteをWordPress 3.1-RC2にアップデートしてはまって解決
coreserverでWordpressをMulti-site運用している。
もともとWPMUを入れていて、WP3にアップデート、現在に至る。
/wp-admin/ に入ろうとすると &reauth=1 に飛ばされて永遠にログインできない事態に巻き込まれ、泥臭く調査してどうにか解決した。
1. ResponseのSet-Cookieヘッダを確認
まずFirebugの用意。ChromeとかIEのツールはリダイレクトを追えないようだ(できるの?誰か教えて!)
まあ、HTTPを見られればなんでもいいです。
で、いっちゃん最初のPOSTからのResponseを確認する。Set-Cookieヘッダ内に domain=とpath=があるはず。僕の場合はこの2つがおかしくてログインに失敗していた。
2. wp-config.phpから、define(“〜〜_CURRENT_SITE”, 〜〜) を削る
これは確か、WPMUあたりでマルチサイト化を始めるにあたり、「wp-config.phpにこれを書いとけよ!」と指示されていたものなのだが、こいつがあるとSet-Cookieのdomainとpathがここに書いた設定に強制的になってしまう。詳しくは wp-includes/ms-load.php の wpmu_current_site() を見るといい。
3. wp_siteテーブルに子サイトの情報を書き込む
これ、なぜか手作業。RC2のバグかもしれん。報告した方がいいのかな。。。そわそわ。
4. wp-include/ms-load.phpを修正
なおらん!どう考えてもおかしい!ということでけっこう強引に直してしまった。
この修正はあんま自信無いです。(動くけど、方針に合ってないかも)
function wpmu_current_site() の真ん中の辺り。
if ( $current_site ) { $path = $current_site->path; $current_site->cookie_domain = $cookie_domain; define('COOKIE_DOMAIN', '.' . $current_site->cookie_domain); define('COOKIEPATH', $path); return $current_site; }
2つのdefine分が追加箇所。
とりあえずこれで動いてます。たぶん。