body_class()で<body>タグのクラス名にページスラッグを追加する

タグのclassに スラッグを追加する

WordPressのオリジナルテーマ作成時、ページによって出力を分岐させたいときってよくありますよね。PHPでif文を書くときは、WordPress関数(is_front-page(), is_page(‘ページID’)など)で、ページの条件を分岐できます。しかし、ページ毎にCSSを使い分けたいときや、JavaScriptでページごとに制御したいときなど、「あれ、classでページって識別できなかったっけ??」となりがちです。

<body>タグにbody_class()をつけると、ページを識別するクラス名を自動で付与してくれます。

目次

body_class()とは

<body>タグに「body_class()」をつけると、生成されるページの種類によって<body>タグにクラス名を付与してくれます。

<body <?php body_class(); ?>>
ページ付与されるクラス名
メインブログページhome blog
フロントページhome page page-id-ページID
投稿ページsingle single-post postid-ページID
固定ページpage page-id-ページID page-template page-template-テンプレート名 page-parent(親ページ) page-child(子ページ) parent-pageid-parent-ID(子ページ)
カテゴリー・アーカイブページarchive category category-カテゴリーのスラッグ
タグ・アーカイブページarchive tag tag-タグのスラッグ
月日系・アーカイブページarchive date
ユーザー・アーカイブページarchive author author-ユーザー名
検索結果ページsearch search-results search-no-results(検索結果なし)
404ページerror404
ログイン状態logged-in

とても便利なのですが、固定ページや投稿ページがページIDで識別されます。

このままでは、特定のページだけ個別のスタイルを当てたいときなど、わざわざページIDを確認して、設定しなきゃだめなんですよね。しかもテスト環境と本番環境などでページIDが変わるとうまく使えない。。。

そんなときは、クラス名にスラッグが入るように変更しましょう。

<body>タグにスラッグが入るようにbody_class()を変更する

functions.phpに以下を追加します。

add_filter('body_class','pagename_class');
function pagename_class($classes = '') {
if (is_page()) {
    $page = get_page(get_the_ID());
    $classes[] = $page->post_name;
  }
  return $classes;
}

これで固定ページの<body>タグのclassにスラッグが入るようになります!

もちろんis_single()も条件に含めれば、投稿ページにもスラッグをつけることができますが、あまり必要性ないかな。。。

スラッグで識別できるようになると便利ですが、そもそもスラッグを日本語(2バイト)にしていると不都合でてくると思いますので、スラッグは半角英数字にするようにしましょうね。

よかったらシェアしてね!
  • URLをコピーしました!
目次