【WordPress】wptexturize が「–」を「–」に勝手に変換していた件

  1. 問題:「–」が勝手に「–」に変わってしまっていた
  2. 原因:wptexturize による文字変換
  3. 解決法:remove_filter()
  4. さらにもう一行

1. 問題:「–」が勝手に「–」に変わってしまっていた

シェルスクリプトの記事を書く中で、投稿ページには「–」と書いていたのに公開された記事を確認したら「–」と表示されてしまっていた。

確かに「–」と入力していた

WordPress の投稿ページではきちんと「–」になっていました。

公開された記事には「–」と反映

ところが、実際に公開されたページをみてみると下記の通り。

なぜか変わってしまっている。

2. 原因:wptexturize による文字変換

調べてみると、WordPress の「wp-includes」フォルダ内「formatting.php」というファイルに記述されている関数「wptexturize()」が原因でした。

この関数はテキストを自動的に変換する機能で、例えばふつうの引用符をスマート引用符へ変えたり、特定の記号の並びをアポストロフィ、ダッシュ、省略符号(…)、商標記号、乗算記号などへ変えたり等、通常便利であろう変換を行うものです。

下の表はその自動変換がされる一例です。

元のテキスト変換されたテキストシンボル名
“—““—”em ダッシュ
” — ““—”em ダッシュ
“–““–”en ダッシュ
” – ““–”en ダッシュ
“…”“…”省略記号
開始引用符
“hello“hello開始引用符
‘hello‘hello開始引用符
終了引用符
world.”world.”終了引用符
world.’world.’終了引用符
” ™”” ™”商標記号
1234″1234″ダブルプライム記号
1234′1234′プライム記号
’99’99西暦の省略表現前のアポストロフィ
Webster’sWebster’sアポストロフィ
1234×12341234×1234乗算記号

3. 解決法:remove_filter()

ということですが、remove_filter() 関数を使ってこの自動変換(wptexturize)を止めることができる様なので、早速 function.php の一番下に下記コードを貼り付けます。

/*wptexturize 無効化*/
remove_filter( 'the_content', 'wptexturize' );

すると下の画像の通り、投稿ページで入力した通りの表記(–)が反映されました。

4. さらにもう一行

この時点で投稿内容では自動変換が止まりましたが、記事タイトル等に関してはまだ変換が行われる状態なので、もう一行追加します。

/*wptexturize 無効化*/
remove_filter( 'the_content', 'wptexturize' );
remove_filter( 'the_title', 'wptexturize' );

一行目の「the_content」の部分を「the_title」に変えただけです。これで記事タイトルに対しても自動変換がされなくなりました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です