WordPressで連続したハイフンを表示させる方法

FC2ブログからWordpressへ移転した歳に、色々とトラブルに遭う。今回は、Wordpressのハイフン(-)問題を解決する方法をい紹介する。

注意:このページで紹介する方法の試す前に、「WordPressの自動変換を中止するカスタマイズ方法」を参考にしてください。リンク先で紹介する方法は、functions.phpをカスタマイズするだけなので、簡単です。

では、本体に入る。Wordpressには、連続するハイフンを省略したり、ハイフンを特殊文字「エンダッシュ」に自動変換する問題がある。

ハイフン(-)とエンダッシュ(–)の2つは、同じ横棒なので見た目では区別がつきいため、ブログの文章を読むだけなら、問題は無い。

しかし、エンダッシュとハイフンは違うため、ソースコードを取り扱う記事などでは問題が発生する。ユーザーがソースをコピー&ペースト(コピペ)で、ソースコードを利用できないのである。

私の環境では、ソースをコピー&ペーストすると、エンダッシュが全て文字化けしてしまった。

したがって、Wordpressの自動置換を止めておく必要がある。Wordpressにハイフン問題を解決する方法は3つある。

  1. HTMLの<pre>タグを使う。
  2. 文字参照の「&#45;」を使う。
  3. /wp-includes/formatting.phpを書き換える。

1番は、HTMLの<pre>タグを使う方法である。<pre>は、「そのまま表示する」という意味のHTMLで、ソースコードや文字参照などを表示する時に使用するHTMLのタグである。

「<pre>----</pre>」というふうに、ハイフンを<pre>タグで囲えば、Wordpressでもハイフンが表示できる。

ただ、<pre>はそのまま表示するタグなので、手動で改行を入れなければ、画面の右端へ行っても自動改行はしてくれないという問題もある。また、ブロック要素なので、文章内では使えないなどの問題もある。

注釈:改行の問題はCSSで解決できる。

2番は特殊文字コード(文字参照)を使う方法である。ハイフンのコードは、「&#45;」なので、ハイフンを「&#45;」に置換すれば、Wordpressでもハイフンが表示できる。

テキストエディタの全置換で一気に置き換えてしまえば良いので、特殊文字のコードを使う方法が適しているのではないかと思う。

ちなみに、Wordpressが勝手に置き換えるエンダッシュの参照文字は「&#8211;」「&#8212;」である。

3番の方法は、Wordpressがハイフンをエンダッシュに置き換えるのを止める方法である。自動書き換えを止めるには、「wp-includes」フォルダ内のformatting.phpを書き換える必要がある。

formatting.phpの57行目に下記のコードがある。(これはWordpress3.1で確認したので、バージョンが異なれば、ファイル名や行数が異なる可能性がある。)

$static_replacements = array_merge(array('&#8212;', ' &#8212; ', '&#8211;', ' &#8211; ', 'xn--', '&#8230;', $opening_quote, $closing_quote, ' &#8482;'), $cockneyreplace);

「—」と「–」の2つがエンダッシュを表示する特殊文字コードなので、この2つをハイフンの特殊文字コード「-」に置き換えると、次のようになる。

「&#8212;」と「&#8211;」の2つがエンダッシュを表示する特殊文字コードなので、この2つをハイフンの特殊文字コード「&#45;」に置き換えると、次のようになる。

$static_replacements = array_merge(array('&#45;&#45;&#45;', ' &#45;&#45; ', '&#45;&#45;', ' &#45; ', 'xn--', '&#8230;', $opening_quote, $closing_quote, ' &#8482;'), $cockneyreplace);

「&#45;」が連続しているのは、Wordpressが連続したハイフンを勝手に省略するのを防ぐためである。

ただし、3番の方法は、コアファイルを変更しているので、Wordpressをアップデートする度に書き換えなければならない。

コアファイルを書き換えることは推奨されていないため、冒頭でも紹介したとおり、今回の方法を試す前に、functions.phpをカスタマイズする「WordPressの自動置換を中止するカスタマイズ方法」を試すことをお勧めします。