WordPress を LAN 内で使ったらダッシュボードが表示されなかった場合の対処方法

ローカルに WordPress-ME を入れて使っている。便利だけど、LAN 内にいるとダッシュボードの内容が表示されない。ずっとほっといてたんだけど、2.0.4 に入れ替えたついでに原因と解決策を調べた。

原因

ダッシュボードを開こうとすると、あらかじめ設定されたサイトから RSS を取得する処理が行われる。この時、LAN 内にいてプロキシサーバが必要な環境だと、取得に失敗し、ダッシュボードの内容が表示されなくなる。また、タイムアウトするまで待機することになるので、ダッシュボードの表示完了 (っていっても内容は真っ白だけど) までの時間も長くなる。ログインすると最初はダッシュボードが表示されるので、これはなかなか不便だ。

解決策

WordPressRSS 取得機能では、HTTP クライアントとして Snoopy を使用している。Snoopy はプロキシ経由での接続に対応しているので、後は設定だけしてあげればいい。
Snoopy を呼んでいる箇所は、wp-includes ディレクトリにある rss-functions.php の中の、_fetch_remote_file 関数。途中に 2 行追加して、proxy_host と proxy_port を設定する。

function _fetch_remote_file ($url, $headers = "" ) {
	// Snoopy is an HTTP client in PHP
	$client = new Snoopy();
	$client->agent = MAGPIE_USER_AGENT;
	$client->read_timeout = MAGPIE_FETCH_TIME_OUT;
	$client->use_gzip = MAGPIE_USE_GZIP;
	$client->proxy_host = "my.proxy";
	$client->proxy_port = "8080";
	if (is_array($headers) ) {
		$client->rawheaders = $headers;
	}
	
	@$client->fetch($url);
	return $client;

}

なお、認証が必要なプロキシの場合は、同様に proxy_user と proxy_pass を設定すればいいみたいだ。