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---A AA ハイフン3つ
A -- A AA ハイフン2つ(前後スペース)
A--A AA ハイフン2つ
A - A AA ハイフン1つ(前後スペース)
... 点3つ(3文字から1文字へ)
`` バッククォート2つ
'' シングルクォート2つ
'21 25 年号の前のアポストロフィ
55' 55 プライム
30" 30 ダブルプライム
abc's abcs 単語中のアポストロフィ
20x30 20×30 掛け算
A (tm) A トレードマーク( (tm)の前にスペース必要)

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