[WordPress]連続したハイフンが勝手に変換されてしまう


【現象】

--rootといったように連続したハイフンを入力して投稿すると–rootというように変換される。

【関係する場所】

  • 記事の投稿編集画面
  • 投稿後の記事ページ

【原因分析】

  • この部分のHtmlコードは–rootとなっている。
    --rootと入力したものが–rootに変換され—rootと表示されている。
  • 変換しているファイルはwp-includes/formatting.php、関数はwptexturize()。
  • 該当部分のソースコード
    $static_characters = array_merge(array('---', ' -- ', '--', ' - ', 'xn–', '...', '``', '\'\'', ' (tm)'), $cockney);
    $static_replacements = array_merge(array('—', ' — ', '–', ' – ', 'xn--', '…', $opening_quote, $closing_quote, ' ™'), $cockneyreplace);
    

【対策】

  1. formatting.phpのソースコードを改変する
    これやってはまりました。このページなどを参考にやってみましたがうまくいかず、あちこちでエラーが発生するようになってしまい、しまいにはWPがうまく動かなくなってしまいました。ソースコード自体をいじるのはちょっと危険かなぁと。(自動)アップグレードのたびに変更するのもいまいちだし。
  2. <pre>タグで囲む
    これならそのまま変換されずに表示されます。
  3. 自分で文字実体参照に変換してから投稿する
    「-(ハイフン」)」の文字実体参照は「&#45;」なので、--rootと入力する場合は「&#45;&#45;root」と入力するようにする。