WordPress 2.8 へアップグレードすると、使用していたショートコードがフィルターされずにそのまま出力される事件が発生。
使用していたのは self-closing tag タイプ。
以下のように連続して入力していた。
[sometag ..... /][sometag ..... /][sometag ..... /][sometag ..... /] |
偶数番目がフィルターされず出力されてしまってました。
タグの間に半角スペースを入れることで対処しました。
[sometag ..... /] [sometag ..... /] [sometag ..... /] [sometag ..... /] |
WP 2.7 系の時はショートコード タグだけでなく投稿本文の同じ文字に反応することがあったのでそれに対応したための副作用ではないかと思い始めています。
wp-includes/shordcodes.php
// 2.7.1 get_shortcode_regex return '\[('.$tagregexp.')\b(.*?)(?:(\/))?\](?:(.+?)\[\/\1\])?'; // 2.8 get_shortcode_regex return '(.?)\[('.$tagregexp.')\b(.*?)(?:(\/))?\](?:(.+?)\[\/\2\])?(.?)'; |
ショートコードの部分を抜き出す正規表現に大幅な手が加えられていました。
これかなぁー?
他にもいくつか変更箇所があるので、そっちもなのでしょうか。
スペース入れればいいだけですから、スペースぐらい入れさせていただきます。
スペースを入れるだけで1日かかったって、そんなのどうってことないです。 😀
update 2009-06-21
フォーラムに質問したら、trac にもあるよと教えてもらった。
Ticket #10082 (accepted defect (bug))
2.8.1で修正されるらしい。
色々な条件のショートコードを抜き出す正規表現は難しいんだね。