【WordPress】確かに「--」と書いたのに「–」と表示される件

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

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

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

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

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

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

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

原因:wptexturize

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

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

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

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

解決法:remove_filter()

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

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

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

さらにもう一行

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

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

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