1. ホーム
  2. WordPress
  3. 【WordPress】タグなどの自動整形機能の無効化・有効化

【WordPress】タグなどの自動整形機能の無効化・有効化

WordPress のコードエディターでは、改行タグを付けなくても、編集画面上で改行していれば <br /> タグが足されたり、自動で <p> タグを補ってくれたり、とても便利ですよね。
でも、こちらがわざわざ書き込んだものを勝手に消されたり、または勝手に付け加えられたり、何してくれてんだよー!なんて思うこともあります。便利な自動整形機能が邪魔に感じることも・・・。

この自動整形機能、function.php に remove_filter() 関数を書き込むことで取り除くことができます。
また、add_filter() 関数で追加も可能。
自動整形機能の関数は、wp-includes ファイルの中の formatting.php で定義されていますが、それぞれの関数の詳細は、こちらに一覧があります。
formatting.php の関数リスト(英語)

自動整形無効化(全ての投稿に適用)

remouve_filter($tag, $function_to_remove) という書き方ですが、変数の意味はこのようになります。
$tag = フィルターフック(除去したい関数が追加されている場所)
$function_to_remove = 除去したいコールバック関数

子テーマ(なければテーマ)の中の、function.php の <!?php ~ ?> の中に、以下のコードを書き込みます。

wpautop() 関数を無効化 (<p> タグ、 <br /> タグの自動挿入無効化)

remouve_filter('the_title', 'wpautop');  // タイトル蘭
remove_filter('the_content', 'wpautop');  // 本文欄
remove_filter('comment_text', 'wpautop');  // コメント欄
remove_filter('the_excerpt', 'wpautop');  // 抜粋欄

wptexturize() 関数を無効化 (記号などの自動変換)

remouve_filter('the_title', 'wptexturize');  // タイトル蘭
remove_filter('the_content', 'wptexturize');  // 本文欄
remove_filter('comment_text', 'wptexturize');  // コメント欄
remove_filter('the_excerpt', 'wptexturize');  // 抜粋欄

自動整形無効化(部分的に適用)

ブログなどの投稿ページ (single.php)には、デフォルトの自動整形を有効化したままにして、固定ページ(page.php)のみ、自動整形を無効化したい、という場合もあると思います。その場合、function.php の <!?php ~ ?> の中に、以下のコードを書き込みます。wpautop() 関数を、固定ページでのみ無効化する例です。

function disable_page_wpautop() {
	if ( is_page() ) remove_filter( 'the_content', 'wpautop' );
}
add_action( 'wp', 'disable_page_wpautop' );

2行目、「is_page()」の部分を変更させることで、他の部分に適用することができます。

自動整形有効化

逆に、無効化されている自動整形の関数を有効化させるには、add_filter() 関数を利用します。
add_filter($tag, $function_to_remove)
$tag = フィルターフック(追加したい関数が追加されている場所)
$function_to_remove = 追加したいコールバック関数

make_clickable() 関数(プレーンテキストURIをHTMLリンクに変換)を有効化する例です。
(デフォルトでは、テキストエディターでの編集では、この関数は無効化されているようです。)
子テーマ(なければテーマ)の中の、function.php の <!?php ~ ?> の中に、以下のコードを書き込みます。

add_filter('the_content', 'make_clickable');  // 本文欄
add_filter('comment_text', 'make_clickable');  // コメント欄
add_filter('the_excerpt', 'make_clickable');  // 抜粋欄

以上、なんですが、一つ、分からないことがあります。

Gutenberg のテキストエディターで、<a> 要素に、<div> 要素を入れ子にすると(文法的には合っていますよね)、前後に、自動で空の <a> 要素が生成されてしまうのです。同じことを Classic エディターで行うと、そんな自動整形は行われません。これを取り除くべく、formatting.php と睨めっこして、どの関数がこのような振る舞いをしているのか突き止めようとしましたが、分かりませんでした。お手上げです。Gutenberg 特有の機能なんでしょうかね。ご存じの方、おりましたら教えてください。Classic エディターで編集することで解決はするのですが、どこの振る舞いか分からなかったのが、気持ち悪いです。検索しましたが、the_content のフィルターフックでこれを実現するには、自分で関数を作って追加する、なんていう方法もありました。でも、元の関数がどこにあるのか、知りたいです。