PHP 5.2.0 で不調だった Geo Plugin ですが、投稿画面の描画がされるようなズボラ修正をほどこしました。その結果、地図ページも復活しました。ついでに、Instant Google Map Plugin の後継である Plug ‘n’ Play Google Map Plugin に更新してみました。Google Map API 2 になったので地図が新しくなり、神戸空港が地図に登場したのはうれしいところです。
さて、肝心の修正箇所ですが、以下の通りです。プラグインが利用するコールバック関数を変更しました。
255,268c255
< function edit_form_advanced($not_used)
< /**
< * Queues the output buffer for displaying the Geo interface on the post
< * editing form
< *
< * Long description for the Function.
< *
< * @param $not_used Description
< */
< {
< ob_start(array('Geo', 'advanced_buffer'));
< }
<
< function advanced_buffer($content)
---
> function edit_form_advanced()
274d260
< * @param $content Description
298c284,285
< return preg_replace('#(<div .*?id="advancedstuff".*?'.'>)#ims', '
\\1' . $output, $content, 1);
---
> echo $output;
> return;
これだけでは修正内容がよく分からないと思うので、当初呼び出されていたコールバック関数の中身を書き出してみましょう。
function edit_form_advanced($not_used)
/**
* Queues the output buffer for displaying the Geo interface on the post
* editing form
*
* Long description for the Function.
*
* @param $not_used Description
*/
{
ob_start(array('Geo', 'advanced_buffer'));
}
当初は、投稿画面に挿入する位置情報編集フィールドの描画 (advanced_buffer 関数) を出力バッファー経由にしていたのです。投稿画面の途中にフィールドを挿入することができないので、ob_start を使って preg_replace でフィールドを挿入する技を使っていたようですが、それが PHP 5.2.0 ではうまく動かないようです。したがって、この処理を外していきなり描画させれば正常になります。
そのために、advanced_buffer 関数 を edit_form_advanced に改名して、末尾の preg_replace をやめて echo に変更しています。こうすれば Location フィールドも描画されます。ただし、描画位置が不格好で、「アップロード」の上に来てしまいます。
[追記] Location フィールドを描画させる修正にしたので、ズボラ修正に関する記述は削除。

[...] ●PHP5.2.0 にしたら投稿不能 @ Yuriko.Net 旅行記 ●PHP 5.2.0 不具合は Geo プラグインが原因 @ Yuriko.Net 旅行記 ●Geoプラグイン修正して地図復活 @ Yuriko.Net 旅行記 [...]
Google Map / Google Earth…
Google APIに関する書籍も、ちらほら増えてきて、Google MapやG (more…)