固定ページでページを作成した時、bodyにページのスラッグを用いたclassを付与したいときありますよね。
例えばcompanyというスラッグなら class=”company” が、serviceというスラッグなら class=”service” が。
今回はスラッグを用いたclassを付与する方法を紹介します。
【スラッグ付与の下準備】body_class();
bodyにスラッグを付与するために、bodyにbody_class();を追加します。
body_class();とは、WordPress 2.8 以降から使えるようになったテンプレートタグで、各ページの種類によって自動で class を割り当ててくれるとても便利な機能です。
使い方はまずbodyタグを下記のように書き換えます。
<body <?php body_class(); ?>>
するとHTML側にはデフォルトで下記のように出力されます。(idはページのidが付与されます。)
<body class="page-template-default page page-id-48 logged-in">
スラッグを用いたclassを付与する
body_class();をbodyに付与するだけでは、任意のスラッグをつけることはできません。
functions.phpに下記を追加する必要があります。
function pagename_class($classes = '') {
if (is_page()) {
$page = get_page(get_the_ID());
$classes[] = $page->post_name;
}
return $classes;
}
add_filter('body_class','pagename_class');
するとbodyにスラッグのclassが追加されます。
<body class="page-template-default page page-id-48 logged-in company">
親ページのスラッグを用いてclassを付与する
親子関係にあるページの子ページに、.親スラッグ名-childという形で付与する方法です。
function pagename_class($classes = '') {
if (is_page()) {
$page = get_post(get_the_ID());
$classes[] = 'page-' . $page->post_name;
if ($page->post_parent) {
$classes[] = get_page_uri($page->post_parent) . '-child';
}
}
return $classes;
}
add_filter('body_class', 'pagename_class');
すると子ページには末尾に「-child」がつく形でclassが付与されるようになります。
<body class="page-template-default page page-id-169 page-child parent-pageid-48 logged-in page-global page-company-child">