うぅ、Wordpress ネタなんかしたかねーんだけど…。
ようやっと謎が解けたのですわ。なんで問答無用で <p> たり <br/> たり、バッククオート(*)が<code></code>たりすんだ、と思ってたのね。これとかこれとかこれとかで大騒ぎしてるよね。
これら、「Wordpress が標準で」、しかも「admin_menuでは制御不能」な問答無用っぷりだけれど、無効にする方法だけはあるんであった:
1 /* disable auto <p>, <br/> */
2 remove_filter('the_content', 'wpautop');
3
4 /* disable
5 * <a href="https://codex.wordpress.org/Function_Reference/wptexturize">wptexturize</a>
6 */
7 remove_filter('the_content', 'wptexturize');
wptexturize は文字通り「gigantic お世話満点」で、コード引用で起こるトラブルのほとんど全部がこれといっていい。これあれだ、「日本人は日本語だけ読んどけや、をらぁ」に近いアレな。
Wordpressのこう…、「Wordpress開発者とプラグイン開発者と読者には優しくて、執筆者にだけ極めて不親切」なノリって、頭おかしいと思うんだ。「ワタシはブログを書きたいだけなんです」って人がさ、一体どうやって php を直接編集しようと思うかね?
「プラグイン開発者には優し」い、についてですけど、「俺のショートコード内を侵すなよ」には、こんなしときます:
1 function our_plugin_exclude_code($excluded_shortcodes) {
2 $excluded_shortcodes[] = 'our_plugin_shortcode';
3
4 /*
5 * change priority of auto <p>, <br/>
6 * so that it runs after shortcodes.
7 */
8 if (has_filter('the_content', 'wpautop')) {
9 remove_filter('the_content', 'wpautop');
10 add_filter('the_content', 'wpautop', 15);
11 }
12
13 /*
14 * change priority of
15 * <a href="https://codex.wordpress.org/Function_Reference/wptexturize">wptexturize</a>
16 * so that it runs after shortcodes.
17 */
18 if (has_filter('the_content', 'wptexturize')) {
19 remove_filter('the_content', 'wptexturize');
20 add_filter('the_content', 'wptexturize', 15);
21 }
22
23 return $excluded_shortcodes;
24 }
25
26 add_filter('no_texturize_shortcodes', 'our_plugin_exclude_code');
the_contentは「記事本文」で、ほかにコメント欄で、とかでも…。
「俺はブログりたいだけなんやぁ」な人はどーすりゃいいのかな…? テーマの functions.php にでも書くんかな…。
21:30 追記
2点。「ほかにコメント欄で、とか」部分については、以下参照:
This didn’t completely solve the problem. Although wordpress now doesn’t put curly quotes, the apostrophe in the HTML title is still rendered using the HTML entity of ampersand and then #039;
に似た振る舞いにまさに悩まされているが、これはもはや解はないようである。これは単独の「&」を WordPress が問答無用で「&#38;」に置換してしまう振る舞いについて言っていて、従ってもはや投稿者が自分で「&#38;」を入力したのか WordPress が置換したのかを区別出来ない、ということであって、shortcode 内を処理したいプラグインは「&#38;」を受け取ってどう振舞えば良いのか、投稿者の真意を教えてもらう以外の方法ではわからない。
「投稿者の真意を教えてもらう」しかないよな、プラグイン作るには。単独「&」の代替テキストを指示させる、とかだな。