WordPressで固定ページだけ自動整形フィルタ(wpautop)を無効にする

問題点

WordPressでは、投稿内容を表示する際に自動的に<p>タグが挿入されたり改行コードが<br />タグに変換さたりする機能があります。 親切機能ではあるのですが、これが問題で投稿画面で「ビジュアル」ではなく「テキスト」でHTMLソースを入力する場合、余計なタグが挿入されて表示が崩れてしまうという問題が起きます。

対策

そこで、まず自動整形フィルタを無効にします。

// 記事の自動整形を無効にする
remove_filter('the_content', 'wpautop');

これで勝手にタグが挿入されることはなくなります。 ですが、これですと、投稿と固定ページの両方とも自動整形ナシになってしまいます。これは、

  • 固定ページはHTMLで記述(なので自動整形はいらない)
  • 新着情報は投稿でリッチエディタで更新(なので自動整形が必要)

という更新方針をとっている場合、問題になります。 ということで、先ほどのコードに、固定ページ以外は自動整形フィルタを復活させるというコードを追記します。

// 記事の自動整形を無効にする
remove_filter('the_content', 'wpautop');

// 固定ページ以外は自動整形を復活させる
if ( ! function_exists( 're_wpautop' ) ) {
    add_action('wp', 're_wpautop');
    function re_wpautop() {
        if(!is_page()) add_filter('the_content', 'wpautop');
    }
}

これでばっちり、固定ページと投稿の切り分け運用ができますね・・!