ローカルに WordPress-ME を入れて使っている。便利だけど、LAN 内にいるとダッシュボードの内容が表示されない。ずっとほっといてたんだけど、2.0.4 に入れ替えたついでに原因と解決策を調べた。
原因
ダッシュボードを開こうとすると、あらかじめ設定されたサイトから RSS を取得する処理が行われる。この時、LAN 内にいてプロキシサーバが必要な環境だと、取得に失敗し、ダッシュボードの内容が表示されなくなる。また、タイムアウトするまで待機することになるので、ダッシュボードの表示完了 (っていっても内容は真っ白だけど) までの時間も長くなる。ログインすると最初はダッシュボードが表示されるので、これはなかなか不便だ。
解決策
WordPress の RSS 取得機能では、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 を設定すればいいみたいだ。