ミギムキ

[WordPress] 特定カテゴリーの記事だけpタグの自動追加を無効にしたい

WordPressの投稿記事は、段落ごと自動的にpタグが追加された状態で出力されます。

ただ、きっちりhtmlとCSSでレイアウトを組んだ場合など、記事の種類や作り方によってはpタグが邪魔になってしまうケースもあります。

このpタグの自動整形機能を、特定の記事だけ有効にする方法をご紹介します。

サンプルコード(functions.php)

function wpautop_filter($content) { if(is_single()) { if(has_category('topics')) { remove_filter('the_content', 'wpautop'); } } return $content; } add_filter('the_content', 'wpautop_filter');

上記サンプルでは「topics」というカテゴリーが設定された記事だけpタグの自動追加を無効にしています。

サンプルコードの解説

カテゴリーの判定

「is_single」は投稿系の記事かどうかを判定します。固定ページやカスタム投稿は除外されます。

「has_category」は引数で指定したカテゴリーが記事に設定されているかどうかを判定します。

サンプルコードが呼ばれる場所・タイミング

サンプルコードは「the_content」というフックに対して「add_filter」という関数を実行してフィルターを追加しています。

これにより、関数「the_content」で「apply_filters」が実行され、追加したフィルター「wpautop_filter」が呼ばれるようになります。

「wpautop_filter」では、デフォルトで追加されているフィルター「wpautop」を「remove_filter」で削除しており、pタグの自動設定を行う「wpautop」が実行されなくなります。

関数「the_content」(wp-includes/post-template.php)

function the_content( $more_link_text = null, $strip_teaser = false ) { $content = get_the_content( $more_link_text, $strip_teaser ); /** * Filters the post content. * * @since 0.71 * * @param string $content Content of the current post. */ $content = apply_filters( 'the_content', $content ); $content = str_replace( ']]>', ']]>', $content ); echo $content; }

ご質問など受け付けています

記事の中でわかりにくかったところ、もっと知りたかったこと、間違っていることなど、何でもお気軽にご連絡ください。

ご連絡は下記フォームを利用いただくか、ツイッターアカウント@flat8migi宛てでもOKです。