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分が追加箇所。

とりあえずこれで動いてます。たぶん。

  • Trackback are closed
  • Comments (2)
    • kuboon
    • Jan 1st. 2012 6:56pm

    WordPress 3.3でもまったく同じ問題が発生し、同じ解決法が有効。

      • kuboon
      • Jul 26th. 2012 5:25pm

      3.4.1 で同様に解決。191行目。

Comment are closed.