WordPressの記事個別ページに表示される本文は、編集画面で本文入力欄に入力された内容に、段落のHTMLタグを加えるなど、様々な加工が施されている。これにより、メールなどのように普通にテキストを入力するだけで、期待通りに表示されるHTMLページが出来上がるのだ。
しかし、知らないうちに余計な加工を行われて問題が生じることも少なくない。その代表格と言えるのが、プログラムのソースコードなどで使われる引用符だ。WordPressは本文中に半角の引用符で囲まれた部分があると、余計な気を利かせて「“”」のように全角の引用符(の実体参照コード)に変換してしまう。これらの文字はプログラムの引用符としては認識されないので、掲載されたコードをそのままコピペしても使えなくなってしまい、非常に不便だ。
この変換は「<code>」タグや「<pre>」タグで囲むか、「"」のようにあらかじめ文字参照コードに変換しておくことで回避できるが、たまにしかやらないと忘れてしまいそうだし、頻繁にやるには面倒くさい。
手間を掛けずに余計な変換を根絶したければ、テーマファイルの「functions.php」などに、変換処理を除去する「remove_filter」の処理を加えてやろう。引用符の自動変換は行われなくなるが、必要なときは自分で入力すればいいだろう。
本文中にこのようなプログラムのコードを記述すると……
引用符がこのような全角引用符のペアに変換されてしまい、そのままコピペして利用できなくなってしまう。
foreach(explode(',','bloginfo,comment_author,comment_text,link_description,link_name,link_notes,list_cats,nav_menu_attr_title,nav_menu_description,single_cat_title,single_month_title,single_post_title,single_tag_title,term_description,term_name,the_content,the_excerpt,the_excerpt_embed,the_title,widget_title,wp_title') as $f){ remove_filter($f,'wptexturize'); }
本文の記号変換を抑止するには、functions.phpに「remove_filter('the_content','wptexturize');」と記述すればいい。他の部分の記号変換も抑止したければ、上記のように全てのフィルタフックを列挙してremove_filterを実行させよう。
function translate_hook($translations, $text, $context, $domain){ switch($context){ case('opening curly single quote'): case('closing curly single quote'): case('apostrophe'):case('prime'):return("'"); case('opening curly double quote'): case('closing curly double quote'): case('double prime'):return("'"); case('en dash'):case('em dash'):return('-'); default:return($translations); } } add_filter('gettext_with_context','translate_hook',100,4);
もう一つ、変換後の引用符テキストの読み込みを上書きして変換を無効化するという手もある。特定のパターンの文字だけを無効化できる他、プラグインや今後のバージョンのWordPressで追加される変換箇所も漏れなく対象にできるぞ。
自動変換を抑止すれば、このように普通に記述した半角の引用符をそのまま表示できるぞ。