WordPress での自動パラグラフやらバッククオートがcodeになったりやらを無効化

うぅ、Wordpress ネタなんかしたかねーんだけど…。

ようやっと謎が解けたのですわ。なんで問答無用で <p> たり <br/> たり、バッククオート(*)が<code></code>たりすんだ、と思ってたのね。これとかこれとかこれとかで大騒ぎしてるよね。

これら、「Wordpress が標準で」、しかも「admin_menuでは制御不能」な問答無用っぷりだけれど、無効にする方法だけはあるんであった:

どっかのphpでバルス
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 を直接編集しようと思うかね?

「プラグイン開発者には優し」い、についてですけど、「俺のショートコード内を侵すなよ」には、こんなしときます:

あんたのプラグイン内の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;」を受け取ってどう振舞えば良いのか、投稿者の真意を教えてもらう以外の方法ではわからない。

「投稿者の真意を教えてもらう」しかないよな、プラグイン作るには。単独「&」の代替テキストを指示させる、とかだな。