WordPress には、入力したハイフン(-)をenダッシュ(–)に自動変換する機能があります。見た目はほぼ変わらないので特に気にする必要はないように思えますが、場合によっては文字化けなどの問題を引き起こしてしまうおせっかいな機能でもあります。また、連続してハイフンを書くとemダッシュ(—)に変換されて、長いダッシュ一本になってしまいますね。
実は、私が運営しているサイトの一つが文字化けを引き起こしていて、タイトルに入れたハイフン(-)が – という文字に置き換えられていました。同じように文字化けして困っている方もいるかもしれないと思ったので、実施した対処をご紹介したいと思います。
functions.phpの編集
functions.php に以下のコードを追加することで、自動変換を停止することができます。ちなみにこの方法だと、ハイフンだけじゃなくその他の(例えばダブルクォーテーションが半角から全角に変換される)機能なども一括して停止できます。
remove_filter('the_title', 'wptexturize'); //記事タイトル remove_filter('the_content', 'wptexturize'); //記事本文 remove_filter('comment_text', 'wptexturize'); //コメント欄 remove_filter('the_excerpt', 'wptexturize'); //抜粋
自動変換を停止したい箇所の行を追加すると、その場所での変換が停止されます。
私の場合、影響が出ていたのはタイトルだけだったので、
remove_filter('the_title', 'wptexturize');
を追加しました。
formatting.phpの編集
functions.php に上記を追加してみたのですが、依然としてタイトルのハイフンは – になったままでした。
そこで、自動変換の処理を行っている部分を直接編集することにしました。ハイフンを変換する処理は、wp-include/formatting.php の以下の行で定義されています。
$en_dash = _x( '–', 'en dash' );
なので、この行を以下のように変更しました。
$en_dash = _x( '-', 'en dash' );
これでようやく文字化けは解消されました。
ちなみに、このコードの周辺にはハイフンと同じように自動変換の処理コードが記述されています。ハイフン以外の変換も停止したい場合は、以下のコードを書き換えましょう。
/* translators: opening curly double quote */ $opening_quote = _x( '“', 'opening curly double quote' ); /* translators: closing curly double quote */ $closing_quote = _x( '”', 'closing curly double quote' ); /* translators: apostrophe, for example in 'cause or can't */ $apos = _x( '’', 'apostrophe' ); /* translators: prime, for example in 9' (nine feet) */ $prime = _x( '′', 'prime' ); /* translators: double prime, for example in 9" (nine inches) */ $double_prime = _x( '″', 'double prime' ); /* translators: opening curly single quote */ $opening_single_quote = _x( '‘', 'opening curly single quote' ); /* translators: closing curly single quote */ $closing_single_quote = _x( '’', 'closing curly single quote' );
なお、上記コードの少し下に、以下のような記述があります。
$static_characters = array_merge( array( '---', ' -- ', '--', ' - ', 'xn–', '...', '``', '\'\'', ' (tm)' ), $cockney ); $static_replacements = array_merge( array( $em_dash, ' ' . $em_dash . ' ', $en_dash, ' ' . $en_dash . ' ', 'xn--', '…', $opening_quote, $closing_quote, ' ™' ), $cockneyreplace );
このコードの $static_characters に入っている文字が $static_replacements の内容に書き換えられるようになっています。なので、この部分を以下のように変更することでもハイフンの自動変換を停止することができます。
$static_characters = array_merge( array( '---', ' -- ', '--', ' - ', 'xn–', '...', '``', '\'\'', ' (tm)' ), $cockney ); $static_replacements = array_merge( array( '---', ' ' . '-' . ' ', '-', ' ' . '-' . ' ', 'xn--', '…', $opening_quote, $closing_quote, ' ™' ), $cockneyreplace );
- がハイフンの文字参照で、連続したハイフンも変換せずに - を参照するようにしています。まぁ、$en_dash など変数の中身を変える方が簡単ですね。
あとがき
formatting.php は WordPress のコアファイルにあたるので、WordPress をアップデートする度に書き換える必要があります。できれば formatting.php の変更は避けた方がいいので、まずは functions.php の編集からお試しいただければと思います。