WordPressの特定のページから自動生成されるpタグを取り除く

どうも、ホワイトです。

WordPressを投稿ページ、固定ページを投稿すると、自動でpタグが入ることになっていますが、これが場合によっては凄く邪魔になるときがあります。
pだけでなくbrタグも然り。

クライアント側で更新してもらうようにした場合に、これが面倒臭いことになることもあるので、シーンに応じたこれら自動整形のpタグ、brタグの除去方法を書いておきたいと思います。

一部を除いて全てfunctions.phpに記述します。

全てのページからpタグ、brタグを取り除く

//自動で入るpタグ、brタグを無効化する
remove_filter('the_content', 'wpautop');
remove_filter('the_excerpt', 'wpautop');

上記ではブログなどの投稿ページ、固定ページ問わず、全てのページから記事本文と抜粋に入るpとbrタグを取り除きます。

これは結構前からよく使っています。

クライアント側で更新を行わないなど、全てテキストモードで投稿を行うときに余計なタグが入らないようにするために設定することがあります。

投稿ページのみpタグとbrタグを取り除く

固定ページはそのまま、投稿ページのみ自動整形タグを除去する場合は以下のように記述します。

add_filter('the_content', 'wpautop_filter', 9);
function wpautop_filter($content) {
    global $post;
    $remove_filter = false;

    $arr_types = array('post'); //自動整形タグを無効にする投稿タイプを指定
    $post_type = get_post_type( $post->ID );
    if (in_array($post_type, $arr_types)) $remove_filter = true;

    if ( $remove_filter ) {
        remove_filter('the_content', 'wpautop');
        remove_filter('the_excerpt', 'wpautop');
    }

    return $content;
}

固定ページのみpタグとbrタグを取り除く

先ほどとは逆に固定ページのみ自動整形タグを取り除く方法です。

クライアント側が投稿ページのみ更新、固定ページはこちらというケースには丁度良く、使う頻度も高いです。

add_filter('the_content', 'wpautop_filter', 9);
function wpautop_filter($content) {
    global $post;
    $remove_filter = false;

    $arr_types = array('page'); //自動整形タグを無効にする投稿タイプを指定
    $post_type = get_post_type( $post->ID );
    if (in_array($post_type, $arr_types)) $remove_filter = true;

    if ( $remove_filter ) {
        remove_filter('the_content', 'wpautop');
        remove_filter('the_excerpt', 'wpautop');
    }

    return $content;
}

カスタム投稿タイプからpタグとbrタグを取り除く

投稿ページ、固定ページと来れば、カスタム投稿タイプの投稿ページからも除去したくなる場合もありますね。

add_filter('the_content', 'wpautop_filter', 9);
function wpautop_filter($content) {
    global $post;
    $remove_filter = false;

    $arr_types = array('column'); //columnという投稿タイプから自動整形タグを除去
    $post_type = get_post_type( $post->ID );
    if (in_array($post_type, $arr_types)) $remove_filter = true;

    if ( $remove_filter ) {
        remove_filter('the_content', 'wpautop');
        remove_filter('the_excerpt', 'wpautop');
    }

    return $content;
}

投稿タイプを指定すれば良いだけです。

いくつかの複数の投稿タイプに応用する場合は以下のように記述します。

//column、book、guideという投稿タイプから自動整形タグを除去する
$arr_types = array('column','book','guide');

除去したい投稿タイプをカンマで区切って記述すれば大丈夫です。

直接テンプレートに記述して自動整形タグを除去する

例外として個別にテンプレートごとに自動整形タグを除去するケースも出てくるかと思います。

そんなときは該当するテンプレートファイルに以下のように記述します。

<?php remove_filter('the_content', 'wpautop'); ?>
<?php the_content(); ?>

<?php the_content(); ?>の直前に記述して対応します。

案件によって、その場に応じて柔軟に対応できるので便利ですね。

これを知ってから楽になった部分もあるので、是非使ってもらえればと思います。