WordPress: ダブルクォーテーションが勝手に置き換わって困るときの対処法

WordPressは投稿した記事をWebページに表示する際に、記事の体裁をうまい具合に整えてくれます。
通常なら記事の執筆者がPタグやbrタグで行間を調整していかなければいけないところ、この調整のおかげで何も気にしないで記事を書けるので、非常によい機能です。

しかしこの機能、僕のように記事中にプログラムのソースコードを掲載している人にとって、とても困った事態を引き起こします。

たとえば、次のように文字をダブルクォーテーションで囲むと、勝手にダブルクォーテーションが他の文字に置き換わってしまいます。

"hello" : 投稿ぺーじで入力した文字

↓ Webページで表示すると

hello : ブラウザに表示される文字

これは、とても困る。

僕も他の人の記事からソースコードの一部をコピペして使ったりしますが、ダブルクォーテーションが他の文字に置き換わっていると実行時にエラーがでてイラっとします。
WordPressが勝手にやっていると知らなかった頃は、ソースコードが間違えていると思ったりもしました。

これは、至急対処しないといけません。

対処法:the_contentフィルターからwptexturize関数を除外する

WordPressは、Webページ表示時にthe_contentフィルターを使用して、投稿された記事を整形しています。
the_contentフィルターには、さまざまな関数が登録されていて、順番に記事のテキストの内容を変更しています。

その関数の一つにwptexturize関数というものがあって、これがダブルクォーテーションを他の文字に置き換えています。

そこで、the_contentフィルターからwptexturize関数を取り除くことで、問題を解決することができます。

次のコードを、function.phpや自作プラグインに記述してください。

the_contentフィルターからwptexturize関数を除外する

remove_filter("the_content", "wptexturize");
remove_filter("the_excerpt", "wptexturize");
remove_filter("the_title", "wptexturize");

一つ目のremove_filter関数が、the_contentフィルターからwptexturize関数を除外しています。
2番目は抜粋テキスト、3番目はタイトルに対して、wptexturize関数を除外しています。

ソースコードのダブルクォーテーションが置き換えられるのを防止するのが目的なら、一つ目だけでいいかもしれません。
このサイトは、一つ目だけです。

お好みで調整してください。

wptexturize関数で置き換えられる文字

wptexturize関数は、ダブルクォーテーションだけでなく、他の文字も置き換えています。

入力文字置き換え後内容
"ABC"ABCダブルクォーテーション
'ABC'ABCシングルクォーテーション
A---AAAハイフン3つ
A -- AAAハイフン2つ(前後スペース)
A--AAAハイフン2つ
A - AAAハイフン1つ(前後スペース)
...点3つ(3文字から1文字へ)
``バッククォート2つ
''シングルクォート2つ
'2125年号の前のアポストロフィ
55'55プライム
30"30ダブルプライム
abc'sabcs単語中のアポストロフィ
20x3020×30掛け算
A (tm)Aトレードマーク( (tm)の前にスペース必要)

もし、一部だけ変換したいときは、wptexturizeを参考に新しく関数を作成するか、wptexturize関数をそのまま適用させて、その後に置き換わってしまった文字を元に戻す関数をthe_contentフィルターに追加する、などの方法が考えられます。