[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です。