WordPressで本文の自動整形をオフにする方法まとめ。

最終更新:2016-12-03 by Joe

ワードプレスの記事編集画面には、特有の「クセ」があります。投稿の本文を、美しく(?)HTMLに出力するために、入力されたテキストに対して自動でHTMLタグを補完する機能があるからです。

もっとも目立つHTML整形機能が「Pタグの補完」です。これは「HTML出力時に、本文の改行(文字コード:\n)をPタグ(<p>xxx</p>)に補完する、という機能です。

これによりHTMLが乱れる事がありますので、これをオフにする機能を紹介します。

そのテンプレートだけ自動整形をオフにする。

所望のテンプレートファイルに通常、以下のような「本文を出力する」関数がありますが、

<?php the_content(); ?>

これをこのように置き換えます。

<?php echo get_the_content(); ?>

これでOKです。

なぜ?

一応補足すると、ワードプレスの自動整形機能はすべて「wpautop()」という関数(フィルター関数)で処理されます。このフィルターはthe_content()には含まれていますが、get_the_content()はフィルターを介さず、データベースに保存された文字列を取得する関数ですので、自動整形が行われない、というだけです。

function the_content( $more_link_text = null, $strip_teaser = false) {
  $content = get_the_content( $more_link_text, $strip_teaser );
  $content = str_replace( ']]&gt;', ']]&amp;gt;', $content );
  echo $content;
}

the_content()関数の中身ですが、apply_filters()が事前に登録されたフィルター関数を$contentに対して実行する部分です。この中に問題(?)のwpautop()が含まれます。

参考:
http://wpdocs.osdn.jp/関数リファレンス/wpautop
http://wpdocs.osdn.jp/テンプレートタグ/the_content
http://wpdocs.osdn.jp/テンプレートタグ/get_the_content

「固定ページ」でだけ自動整形をオフにする

特定のタイミング、特定の条件で、上記で言及した「autopフィルター」を外します。

// the_content() からフィルター削除
remove_filter('the_content', 'wpautop');
// ついでに、the_excerpt() からもフィルター削除
remove_filter('the_excerpt', 'wpautop');

これをどこに記述するかはあなた次第です。
固定ページテンプレートであれば、page.phpの戦闘にかいてもいいでしょう。
もしくはfunction.phpないで、条件分岐を実装できます。

if ( is_main_query() && is_page() ) {
  remove_filter('the_content', 'wpautop');
  remove_filter('the_excerpt', 'wpautop');
}

あらゆる投稿で自動整形をすべてオフにする

functions.phpで、以下を実行します。

  remove_filter('the_content', 'wpautop');
  remove_filter('the_excerpt', 'wpautop');