固定ページでbody_class()にページスラッグを表示させる方法【WordPress】

ページ毎で見出しや段落の処理を変えたいとき、ページの最も親要素であるbodyタグに識別させるものを設置するととても便利でCSSもスマートになります。

WordPressには「body_class()」という関数が用意してあり、デフォルトのテーマなどにはbodyタグに設置してあります。

<body <?php body_class(); ?>>

このbody_class()関数のおかげで、サイトのHOMEではbodyタグに「class=”home”」homeクラスを、カテゴリーページでは「class=”category-slugname”」(slugnameはカテゴリのスラッグ名)、投稿のページでは「class=”single”」というクラスを設定してくれます。

しかし、固定ページではページのID番号を記すだけでページのスラッグ名は表示してくれません。

ここでは、body_class()に固定ページのときはそのページのスラッグ名をclassに追記させる方法を説明します。

※bodyタグには、上記のように必ずbody_class()が設置されていることが条件となります。

「テーマのための関数(functions.php)」ページに下記のソースを貼り付けます。

function pageslug_class($classes = '') {
  if (is_page()) {
    $page = get_post(get_the_ID());
    $classes[] = $page->post_name;
    if ($page->post_parent) {  // ページが子ページであったときの処理
      $classes[] = get_page_uri($page->post_parent) . '-' . $page->post_name;
      // 「親ページのスラッグ-子ページのスラッグ」という表示に調整
    }
  }
  return $classes;
}
add_filter('body_class', 'pageslug_class');

上記ソースでは、固定ページが親ページを持つ子ページだった場合は、「親ページのスラッグ-子ページのスラッグ」となるようにしています。
WordPressでは、親のスラッグが異なればスラッグが同じになっても問題なく設定されてしまうため、CSSで被ったりすることを回避するために設定しました。

これで少しはHTMLが整理されると思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です