
WordPressは投稿した記事をWebページに表示する際に、記事の体裁をうまい具合に整えてくれます。
通常なら記事の執筆者がPタグやbrタグで行間を調整していかなければいけないところ、この調整のおかげで何も気にしないで記事を書けるので、非常によい機能です。
しかしこの機能、僕のように記事中にプログラムのソースコードを掲載している人にとって、とても困った事態を引き起こします。
たとえば、次のように文字をダブルクォーテーションで囲むと、勝手にダブルクォーテーションが他の文字に置き換わってしまいます。
"hello" : 投稿ぺーじで入力した文字
↓ Webページで表示すると
“hello” : ブラウザに表示される文字
これは、とても困る。
僕も他の人の記事からソースコードの一部をコピペして使ったりしますが、ダブルクォーテーションが他の文字に置き換わっていると実行時にエラーがでてイラっとします。
WordPressが勝手にやっていると知らなかった頃は、ソースコードが間違えていると思ったりもしました。
これは、至急対処しないといけません。
対処法:the_contentフィルターからwptexturize関数を除外する
WordPressは、Webページ表示時にthe_contentフィルターを使用して、投稿された記事を整形しています。
the_contentフィルターには、さまざまな関数が登録されていて、順番に記事のテキストの内容を変更しています。
その関数の一つにwptexturize関数というものがあって、これがダブルクォーテーションを他の文字に置き換えています。
そこで、the_contentフィルターからwptexturize関数を取り除くことで、問題を解決することができます。
次のコードを、function.phpや自作プラグインに記述してください。
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 | A—A | ハイフン3つ |
A -- A | A — A | ハイフン2つ(前後スペース) |
A--A | A–A | ハイフン2つ |
A - A | A – A | ハイフン1つ(前後スペース) |
... | … | 点3つ(3文字から1文字へ) |
`` | “ | バッククォート2つ |
'' | ” | シングルクォート2つ |
'21 | ’25 | 年号の前のアポストロフィ |
55' | 55′ | プライム |
30" | 30″ | ダブルプライム |
abc's | abc’s | 単語中のアポストロフィ |
20x30 | 20×30 | 掛け算 |
A (tm) | A ™ | トレードマーク( (tm)の前にスペース必要) |
もし、一部だけ変換したいときは、wptexturizeを参考に新しく関数を作成するか、wptexturize関数をそのまま適用させて、その後に置き換わってしまった文字を元に戻す関数をthe_contentフィルターに追加する、などの方法が考えられます。