WordPress でダブルクォーテーションなどの記号が勝手に置換されるのを無効化

WordPressには、本文に含まれるダブルクォーテーションなどの記号を別の記号に置き換える機能が標準で付いています。普通の日記などのブログであれば特に気にならないかもしれませんが、技術系の記事を書くブログでは、なかなかおせっかいな機能に感じるかもしれません。

今回は、この機能を無効化する方法を紹介します。

使用バージョン:WordPress 6.7.2

記号が勝手に変換されるのを完全に無効化する方法

WordPress はwptexturize()という関数を使って、ダブルクォーテーションなどの記号を別の記号に置き換えています。これを完全に無効化するには、functions.phpに以下のように記述します。

add_filter('run_wptexturize', '__return_false');

たったこれだけで OK です。

一部の出力関数のみ無効化する方法

完全に無効化しないで、一部の出力関数のみ無効化できればいいという場合は、remove_filter()を使用します。例えば、【タイトル】【本文】【抜粋】について無効化する場合は、functions.phpに以下のように記述します。

remove_filter("the_title", "wptexturize"); // タイトル
remove_filter("the_content", "wptexturize"); // 本文
remove_filter("the_excerpt", "wptexturize"); // 抜粋

上記以外の関数で無効化したい場合は、記事の最後にwptexturize()がフィルターとして実行されている関数の一覧を記載しておくので、そちらをご参照ください。

一部のタグ内のみ無効化する方法

WordPress の標準の状態でも、pre,code,kbd,style,script,ttタグの中にある記号については変換されないようになっています。この変換されないタグのリストに新しいタグを追加する場合は、functions.phpに以下のように記述し、デフォルトの配列に新しい配列をマージします(blockquoteタグについて無効化する場合の例)。

add_filter('no_texturize_tags', function($tags) {
  // デフォルトの $tags に新しい要素を追加
  $tags = array_merge($tags, array('blockquote'));
  return $tags;
});

wptexturize() によって変換される文字と変換後の文字

ここまで変換を無効化する方法について説明してきましたが、実際にどのような記号が変換されるのか、変換前と変換後の文字を表にまとめてみました。

変換前の文字変換後の文字
--- ハイフン3つ エムダッシュ
--  ハイフン2つ + スペース エムダッシュ
-- ハイフン2つ エンダッシュ
ハイフン1つ + スペース エンダッシュ
... ドット3つ 3点リーダー
`` クレイヴ・アクセント2つ 開始引用符
'' シングルクォーテーション2つ 終了引用符
' シングルクォーテーションoror (前後の文字列によって変化)
" ダブルクォーテーションoror (前後の文字列によって変化)
 (tm) スペース + (tm) 商標記号
320x240 数値x数値320×240 乗法記号

クォーテーションなどは、前後に付いているのが単語か数字か、単語や数字の前後どちらについているかによって複雑に変化するようです。ハイフンなども、いくつ連続してるか、後ろにスペースがあるかで変化したりと、なかなかややこしい挙動になっています。

wptexturize() がフィルターとして実行されている関数一覧

一部の出力関数については上で説明しましたが、それ以外にwptexturize()がフィルターとして実行されている関数は以下の通りです。一部だけ無効化したい場合はご参照ください。

関数名説明
the_title投稿または固定ページのタイトルを表示する。
the_content投稿やページの本文を表示する。
the_excerpt記事の抜粋を表示する。
the_post_thumbnail_caption投稿のアイキャッチ画像のキャプションを表示する。
comment_textコメントの本文を表示する。
widget_text_contentテキストウィジェットの内容を取得または表示する。
the_excerpt_embed埋め込み時に使用される抜粋を取得または表示する。
comment_authorコメントの投稿者名を表示する。
term_nameカテゴリーやタグなどのタクソノミーの名前を取得する。
bloginfoサイトの基本情報(URL、タイトル、説明など)を取得する。
document_titleページのタイトルを取得する。
widget_titleウィジェットのタイトルを取得または表示する。
single_post_title単一投稿のタイトルを表示する。
single_cat_titleカテゴリーのタイトルを表示する。
single_tag_titleタグのタイトルを表示する。
single_month_title月別アーカイブのタイトルを表示する。
nav_menu_attr_titleナビゲーションメニューのタイトル属性を取得する。
nav_menu_descriptionナビゲーションメニューの説明を取得する。
term_descriptionカテゴリーやタグの説明を取得する。
get_the_post_type_description投稿タイプの説明を取得する。

まとめ

  • add_filter('run_wptexturize', '__return_false');で完全に無効化できる
  • remove_filter()で一部の関数のみ無効化できる
  • no_texturize_tagsにフィルターフックを追加することで特定のタグのみ無効化できる

以上、WordPress でダブルクォーテーションなどの記号が勝手に置換されてしまうのを防ぐ方法について解説しました。見た目ではわかりづらい変化ですが、プログラムなどでは致命的な変化ですからね…。お困りの方がいたら是非この記事を参考にしてください。