WordPress/JetPack がまた完全修飾URLを吐くのでキーッ!

WordPress(だけじゃないけどさぁ…)が http://www.example.com/some/article のような「完全修飾URL」(ぼくが勝手に名付けた)を吐きまくるのは、どうして害があるのかいくらでも論理的に悪態をつけるのだがここではやめておく。とにかく導入したら最初に手を付けるのが /some/article のようにリソースのルートからの絶対パスに書き換えること。

で、サーバ再構築を機械に WordPress サイトも完全SSL化してしまおうと手を付けたらなんだか Contact Form 7 がうまく動かなくて「じゃ、JetPack でも使うかー」と設定して気づいた。

「こいつ… form の action がまた完全修飾URLだ…」

頼むからわざわざスキームやホストやポート番号を特に理由もなく出力HTMLにハードコードするのはやめて! お兄ちゃんのバカ!

ということで頭にきたので今回はプラグインを書き換えることにした。

jetpack/modules/contact-form/grunion-contact-form.php が修正対象。

# diff -u --from-file grunion-contact-form.php.org grunion-contact-form.php
--- grunion-contact-form.php.org    2015-05-27 04:14:14.156969300 +0900
+++ grunion-contact-form.php    2015-05-27 07:07:47.645268100 +0900
@@ -1012,8 +1012,10 @@
                $url = get_permalink();
            }

+           $url = preg_replace( '/(http|https)://[^/]+//', "/", $url );
+
            // For SSL/TLS page. See RFC 3986 Section 4.2
-           $url = set_url_scheme( $url );
+           // $url = set_url_scheme( $url );

            // May eventually want to send this to admin-post.php...
            $url = apply_filters( 'grunion_contact_form_form_action', "{$url}#contact-form-{$id}", $GLOBALS['post'], $id );

どうだ、明るくなっただろう。というか「For SSL/TLS page」なんて言葉じりにこだわってる余裕があるんだったら、もうちょっと合理性を考えてほしいよ。