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バイト)にしていると不都合でてくると思いますので、スラッグは半角英数字にするようにしましょうね。