WordPressでは、「'
(シングルクオート)」と「"
(ダブルクオート)」が、下のように自動変換されてしまいます。
'
シングルクオート'
→ ‘シングルクオート’"
ダブルクオート"
→ “ダブルクオート”目を凝らさないと分からないような違いですが、おわかりでしょうか?(右の変換後のものは丸みを帯びた点になっています。)
もしも、記事の中にプログラムのコードを記載するような場合は、この変換は致命的です。全く動作しないコードになってしまいます。
いっぽう、メリットを考えてもあまり見つかりません。
このような、投稿内の一部の文字を(勝手に)変換してくれるWordPressの機能をwptexturizeといいます。
勝手に変換されては困る、という方のために、wptexturizeを停止する方法を解説します。
方法1: 全ての自動変換を無効にする
テーマファイルのfunctions.php内に以下のコードを追加します。
1 2 3 4 |
remove_filter( 'the_title', 'wptexturize' ); // タイトルの自動変換を無効 remove_filter( 'the_excerpt', 'wptexturize' ); // 抜粋の自動変換を無効 remove_filter( 'the_content', 'wptexturize' ); // 本文の自動変換を無効 remove_filter( 'comment_text', 'wptexturize' ); // コメントの自動変換を無効 |
これでwptexturize自体を無効化できます。
wptexturizeはシングルクオート、ダブルクオート以外の自動変換も行っているので、それらも全て無効になります。では、wptexturizeではどんな文字が変換されているのでしょうか。
WordPress Codexによると、変換される文字は主に以下の通りです。
source text transformed text symbol name "---" "—" em-dash " -- " "—" em-dash "--" "–" en-dash " - " "–" en-dash "xn–" "xn--" "..." "…" ellipsis “ opening quote '' ” closing quote " (tm)" " ™" trademark symbol 1234" 1234″ double prime symbol 1234' 1234′ prime symbol 1234x1234 1234×1234 multiplication symbol
人それぞれだとは思いますが、あんまり問題無さそうな物ばかりですね。
特にコメント欄なんかは、コメントする方に無断で書き換えてしまうという仕様は良くない気がします。
いっぽう、wptexturizeを全て無効化してしまうのはちょっと気が引ける、という場合には、次の方法もあります。
方法2: <code>タグを使用する
WordPressでは、<code><pre>
など特定のタグ内ではwptexturizeが無効になります。
<code>
タグは、投稿画面のテキストエディタでもボタン1つで簡単に挿入できますので、プログラムのコードの部分は常に<code>
で囲む、というのを習慣にしておけば良いと思います。
投稿画面のビジュアルエディタからも<code>タグを追加したい場合は、この記事のプラグインがおすすめです。
ビジュアルエディタにcodeタグボタンを追加するプラグイン
方法3: 自動変換しないタグやショートコードを設定
<code><pre>
などのタグ以外にも、wptexturizeが無効になるタグやショートコードを、自分で設定する事ができます。
以下のコードをfunctions.phpに追加します。
任意のタグ内でwptexturizeを無効
1 2 3 4 5 6 |
// <blockquote>タグ内で無効 add_filter( 'no_texturize_tags', 'my_no_texturize_tags' ); function my_no_texturize_tags( $tags ){ $tags[] = 'blockquote'; return $tags; } |
wptexturizeを無効にするショートコードを作成
1 2 3 4 5 6 7 8 9 10 11 |
// ショートコード[no_texturize]を作成 add_shortcode( 'no_texturize', 'no_texturize_shortcode' ); function no_texturize_shortcode( $atts, $content = "" ) { return $content; } // ショートコード[no_texturize]内でwptexturizeを無効 add_filter( 'no_texturize_shortcodes', 'my_no_texturize_shortcodes' ); function my_no_texturize_shortcodes( $shortcodes ){ $shortcodes[] = 'no_texturize'; return $shortcodes; } |
まとめ
シングルクオート、ダブルクオートの自動変換を無効にするには、
- 全ての自動変換を無効化する
または、
- 自動変換されたくない部分に
<code><pre>
タグを使用する - 必要に応じて、自動変換を無効化するタグやショートコードを設定
サイトの使用条件に応じて、いずれかを選択すると良いでしょう。