wordpressでプラグインやウィジェットで呼び出されるURLを書き換える方法

http://wpdocs.sourceforge.jp/プラグイン_API/フィルターフック一覧
に書いてある通り「post_link」にフィルターを加えればいいらしい。

function.phpに
add_filter( ‘post_link’, ‘hogehoge_function’ );
みたいに望みのフィルターを足せば、ウィジェット・プラグインで呼び出したURLにも適用される。

例えば

function make_href_root_relative($input) {
return preg_replace(‘!http(s)?://’ . $_SERVER[‘SERVER_NAME’] . ‘/blog!’, ‘http://hogehoge.jp/hoge’, $input);
}
function root_relative_permalinks($input) {
return make_href_root_relative($input);
}
add_filter( ‘post_link’, ‘root_relative_permalinks’ );

とか。

これが必要になったのはとあるwordpressブログの修正のため。

ReverseProxyを使って、あるドメインのディレクトリに別サーバにあるwordpressのブログを表示させている。

つまり
http://hogehoge.jp/hoge/
にアクセスすると
http://***.***.***.***/blog/
の中身が表示される。

普通こういう場合は
一般設定→サイトアドレス(URL)

http://hogehoge.jp/hoge/
を入れるもんだと思うんだけど、いろいろ事情があってそれが出来なかった。

それでリライトを入れまくったらワケわかんなくなって「望むとおりに動いているが、なぜそうなっているのか分からない」というまずい状況になってしまった。

そんな状況下で、ウィジェットでサイドバーに最新記事一覧を出す必要が出てきた。ところが、そのままウィジェット足したら、URLが「http://***.***.***.***/blog/」の方になってしまった。これを修正するために、上記のフィルターフックを発見したわけだ。

まあとりあえずうまくいったので良かったわけだが、最初の構築時にしっかり構造を把握しておくべきだった。最初手を抜くと後が地獄になる。