WordPress Body Class 101:テーマデザイナー向けのヒントとトリック

WordPressテーマデザイナーを目指すなら、CSSを習得することが、ワークフローにおけるより大きなコントロール、カスタマイズ、効率性を解き放つ鍵となります。

幸いなことに、WordPressはテーマで利用できるCSSクラスを自動的に追加します。これらのCSSクラスのいくつかは、WordPressウェブサイトの各ページの<body>セクションに自動的に追加されます。

この記事では、WordPressのbodyクラスについて説明します。また、テーマ開発の長年の経験から、プロジェクトを強化するのに役立つWordPressのbodyクラスの使用に関するヒントとトリックも共有します。

テーマ開発のためのWordPress bodyクラスの使用
Here is a quick overview of what you’ll learn in this article.

WordPress の body class とは何ですか?

ボディクラス(body_class)は、body 要素に CSS クラスを割り当てることができる WordPress の関数です。

HTML の body タグは通常、すべてのページで読み込まれるテーマの header.php ファイルで始まります。これにより、ユーザーがどのページを表示しているかを動的に把握し、それに応じて CSS クラスを追加することができます。

通常、ほとんどのスターターテーマやフレームワークには、HTML body タグ内に body class 関数が既に含まれています。ただし、テーマに含まれていない場合は、body タグを次のように変更して追加できます。

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

表示されているページのタイプに応じて、WordPressは適切なクラスを自動的に追加します。

例えば、アーカイブページにいる場合、WordPress は自動的に body 要素に archive クラスを追加します。これはほぼすべてのページに対して行われます。

関連情報: WordPressの舞台裏の仕組み(インフォグラフィック)をご覧ください。

表示されているページによって、WordPress が追加する可能性のある一般的なクラスの例をいくつか示します。

.rtl {}
.home {}
.blog {}
.archive {}
.date {}
.search {}
.paged {}
.attachment {}
.error404 {}
.single postid-(id) {}
.attachmentid-(id) {}
.attachment-(mime-type) {}
.author {}
.author-(user_nicename) {}
.category {}
.category-(slug) {}
.tag {}
.tag-(slug) {}
.page-parent {}
.page-child parent-pageid-(id) {}
.page-template page-template-(template file name) {}
.search-results {}
.search-no-results {}
.logged-in {}
.paged-(page number) {}
.single-paged-(page number) {}
.page-paged-(page number) {}
.category-paged-(page number) {}
.tag-paged-(page number) {}
.date-paged-(page number) {}
.author-paged-(page number) {}
.search-paged-(page number) {}

ご覧の通り、このような強力なリソースがあれば、CSS を使用するだけで WordPress ページを完全にカスタマイズできます。特定の投稿者プロフィールページや日付ベースのアーカイブなどをカスタマイズできます。

とはいえ、ここでbodyクラスの使い方と使用時期を見ていきましょう。

WordPress の body class を使用するタイミング

まず、上記の例のように、テーマの body 要素に body_class 関数が含まれていることを確認する必要があります。含まれている場合、上記で言及された WordPress が生成したすべての CSS クラスが自動的に含まれます。

その後、body 要素に独自のカスタム CSS クラスを追加できるようになります。これらのクラスは必要に応じていつでも追加できます。

たとえば、特定のカテゴリに属する特定の著者の記事の外観を変更したい場合などです。

カスタムボディクラスの追加方法

WordPress には、必要に応じてカスタムボディクラスを追加するために利用できるフィルターがあります。特定のユースケースシナリオを示す前に、フィルターを使用してボディクラスを追加する方法を示します。これにより、全員が同じ認識を持てるようにします。

bodyクラスはテーマ固有であるため、テーマのfunctions.phpファイルまたはコードスニペットプラグインに次のコードを追加する必要があります。

function my_class_names($classes) {
    // add 'class-name' to the $classes array
    $classes[] = 'wpb-class';
    // return the $classes array
    return $classes;
}
 
//Now add test class to the filter
add_filter('body_class','my_class_names');

上記のコードは、ウェブサイトのすべてのページでbodyタグに「wpb-class」というクラスを追加します。

このコードは、市場で最高のコードスニペットプラグインであるWPCodeを使用して追加することをお勧めします。これにより、テーマのfunctions.phpファイルを編集せずに、WordPressにカスタムコードを安全かつ簡単に追加できます。

まず、無料のWPCodeプラグインをインストールして有効化する必要があります。手順が必要な場合は、WordPressプラグインのインストール方法に関するガイドを参照してください。

プラグインを有効化したら、WordPressダッシュボードから Code Snippets » + Add Snippet に移動します。

次に、「Add Your Custom Code (New Snippet)」オプションを見つけて、その下にある「+ Add Custom Snippet」ボタンをクリックします。

WPCodeでカスタムコードを追加する

そこから、画面に表示されるオプションのリストからコードタイプを選択する必要があります。

このチュートリアルでは、「PHPスニペット」を選択します。

コードの種類としてPHPスニペットを選択

次に、コードが何のためのものかを覚えるのに役立つ、スニペットのタイトルを追加します。

次に、上記のコードを「コードプレビュー」ボックスに貼り付けます。

コードをコードプレビューボックスに貼り付けます

その後、スイッチを「非アクティブ」から「アクティブ」に切り替え、「スニペットを保存」ボタンをクリックするだけです。

カスタムコードスニペットを有効化して保存する

これで、このCSSクラスをテーマのスタイルシートで直接利用できます。

ご自身のウェブサイトで作業している場合は、WordPressテーマカスタマイザーのカスタムCSS機能を使用してCSSを追加することもできます。

テーマカスタマイザーでカスタムCSSを追加する

詳細については、WordPressサイトにカスタムCSSを簡単に追加する方法に関するガイドをご覧ください。

WordPressプラグインを使用してボディクラスを追加する

クライアントプロジェクトに取り組んでおらず、コードを記述したくない場合は、この方法がより簡単です。

まず、カスタムボディクラスプラグインをインストールして有効化する必要があります。詳細については、WordPressプラグインのインストール方法のステップバイステップガイドをご覧ください。

有効化したら、設定 » カスタムボディクラスページにアクセスする必要があります。ここからプラグインの設定を構成できます。

カスタムボディクラス設定

bodyクラス機能を有効にしたい投稿タイプと、それにアクセスできるユーザーを選択できます。設定を保存するには、「変更を保存」ボタンをクリックすることを忘れないでください。

次に、WordPressサイトの投稿またはページを編集できます。投稿編集画面では、右側の列に「投稿クラス」という新しいメタボックスが表示されます。

WordPressで投稿にボディクラスを追加する

カスタムCSSクラスを追加するにはクリックしてください。複数のクラスはスペースで区切って追加できます。

完了したら、投稿を保存または公開するだけです。プラグインは、その特定の投稿またはページに対してカスタム CSS クラスを body クラスに追加します。

条件付きタグをボディクラスで使用する

body_class 関数の真の力は、条件付きタグと組み合わせて使用されたときに発揮されます。

これらの条件付きタグは、WordPressで条件が真か偽かをチェックする真偽値データ型です。たとえば、条件付きタグis_homeは、現在表示されているページがホームページであるかどうかをチェックします。

これにより、テーマ開発者は、body_class 関数にカスタム CSS クラスを追加する前に、条件が真か偽かをチェックできます。

bodyクラスにカスタムクラスを追加するために条件付きタグを使用する例を見てみましょう。

例えば、著者ユーザーロールを持つログイン中のユーザーに対して、ホームページのスタイルを異なるものにしたいとします。WordPressは.home.logged-inクラスを自動生成しますが、ユーザーロールを検出してクラスとして追加することはありません。

さて、これは条件付きタグとカスタムコードを組み合わせて、bodyクラスにカスタムクラスを動的に追加できるシナリオです。

これを実現するには、次のコードをテーマのfunctions.phpファイルまたはコードスニペットプラグインに追加する必要があります。

function wpb_loggedin_user_role_class($classes) { 
 
// let's check if it is homepage
if ( is_home() ) {
 
// Now let's check if the logged in user has author user role.  
$user = wp_get_current_user();
if ( in_array( 'author', (array) $user->roles ) ) {
    //The user has the "author" role
    // Add user role to the body class
    $classes[] = 'author';
    // Return the classes array
    return $classes;      
} 
} else { 
// if it is not homepage, then just return default classes
return $classes; 
}
} 
 
add_filter('body_class', 'wpb_loggedin_user_role_class');

さて、もう一つ便利な例を見てみましょう。今回は、表示されているページがWordPressの下書きのプレビューかどうかを確認します。

そのために、条件付きタグ is_preview を使用し、カスタム CSS クラスを追加します。

function add_preview_class($classes) { 
if ( is_preview() )  {
$classes[] = 'preview-mode';
return $classes;
}
return $classes; 
}
add_filter('body_class','add_preview_class');

ここで、先ほど追加した新しいカスタム CSS クラスを利用するために、以下の CSS をテーマのスタイルシートに追加します。

.preview-mode .site-header:before { 
content:'preview mode';
color:#FFF;
background-color:#ff0000;
}

デモサイトではこのように表示されました:

カスタムプレビューモードの CSS クラスがボディクラスに追加されました

WordPressで使用できる条件タグの完全なリストを確認することをお勧めします。これにより、コードですぐに使用できる便利なタグのセットが得られます。

カスタムボディクラスを動的に追加するその他の例

条件付きタグ以外にも、WordPressデータベースから情報を取得し、bodyクラスのカスタムCSSクラスを作成するために、他のテクニックを使用することもできます。

シングル投稿ページのbodyクラスにカテゴリ名を追加する

カテゴリーに基づいて単一投稿の外観をカスタマイズしたいとしましょう。これにはbodyクラスを使用できます。

まず、単一投稿ページにカテゴリ名を CSS クラスとして追加する必要があります。これを行うには、テーマの functions.php ファイルまたは WPCode のようなコードスニペットプラグインに次のコードを追加します。

// add category nicenames in body class
function category_id_class($classes) {
    global $post;
    foreach((get_the_category($post->ID)) as $category)
        $classes[] = $category->category_nicename;
    return $classes;
}
  
add_filter('body_class', 'category_id_class');

上記のコードは、単一投稿ページのボディクラスにカテゴリクラスを追加します。その後、CSSクラスを使用して自由にスタイルを設定できます。

bodyクラスにページスラッグを追加する

次のコードをテーマの functions.php ファイルまたはコードスニペットプラグインに貼り付けます:

//Page Slug Body Class
function add_slug_body_class( $classes ) {
global $post;
if ( isset( $post ) ) {
$classes[] = $post->post_type . '-' . $post->post_name;
}
return $classes;
}
add_filter( 'body_class', 'add_slug_body_class' );

WordPressでこのコードを追加するには、WPCodeのようなコードスニペットプラグインを使用することをお勧めします。そうすれば、サイトを壊してしまう心配がありません。

まず、無料の WPCode プラグインをインストールして有効化します。ヘルプが必要な場合は、WordPress プラグインのインストール方法に関するこのガイドに従ってください。

プラグインがアクティブになったら、WordPressダッシュボードからCode Snippets » Add Snippetに移動します。

次に、「カスタムコードを追加(新規スニペット)」オプションの下にある「スニペットを使用」ボタンをクリックします。

WPCodeでカスタムコードを追加する

次に、コードの種類として「PHP スニペット」を選択します。

コードの種類としてPHPスニペットを選択

その後、コードスニペットにタイトルを追加し、上記のコードを「コードプレビュー」ボックスに貼り付けます。

コードスニペットをWPCodeに貼り付ける

最後に、スイッチを「非アクティブ」から「アクティブ」に切り替え、「スニペットを保存」ボタンをクリックします。

カスタムコードスニペットを有効化して保存する

ブラウザ検出とブラウザ固有のボディクラス

特定のブラウザに対してテーマに追加のCSSが必要になる問題に遭遇することがあります。

さて、良いニュースは、WordPressが読み込み時にブラウザを自動的に検出し、その情報を一時的にグローバル変数として保存することです。

WordPress が特定のブラウザを検出したかどうかを確認し、カスタム CSS クラスとして追加するだけです。

次のコードをテーマのfunctions.phpファイルまたはコードスニペットプラグインにコピー&ペーストするだけです。

function wpb_browser_body_class($classes) { 
    global $is_iphone, $is_chrome, $is_safari, $is_NS4, $is_opera, $is_macIE, $is_winIE, $is_gecko, $is_lynx, $is_IE, $is_edge;
 
if ($is_iphone)    $classes[] ='iphone-safari';
elseif ($is_chrome)    $classes[] ='google-chrome';
elseif ($is_safari)    $classes[] ='safari';
elseif ($is_NS4)    $classes[] ='netscape';
elseif ($is_opera)    $classes[] ='opera';
elseif ($is_macIE)    $classes[] ='mac-ie';
elseif ($is_winIE)    $classes[] ='windows-ie';
elseif ($is_gecko)    $classes[] ='firefox';
elseif ($is_lynx)    $classes[] ='lynx';
elseif ($is_IE)      $classes[] ='internet-explorer';
elseif ($is_edge)    $classes[] ='ms-edge';
else $classes[] = 'unknown';
     
return $classes;
}
add_filter('body_class','wpb_browser_body_class');

次のようなクラスを使用できます:

.ms-edge .navigation {some item goes here}

パディングやマージンが小さい問題であれば、これは比較的簡単な解決方法です。

body_class 関数を使用することで、コードの記述量を大幅に削減できるシナリオは他にもたくさんあります。例えば、Genesis のようなテーマフレームワークを使用している場合、子テーマにカスタムクラスを追加するために使用できます。

body_class関数を使用して、フル幅のページレイアウト、サイドバーコンテンツ、ヘッダーとフッターなどのCSSクラスを追加できます。

WordPressテーマデザインに関するエキスパートガイド

他にもチュートリアルをお探しですか?WordPressのテーマデザインに関するその他のガイドをご覧ください:

この記事が、テーマで WordPress のボディクラスを使用する方法を学ぶのに役立ったことを願っています。また、各 WordPress 投稿を異なる方法でスタイル設定する方法に関する記事や、最高の WordPress ページビルダープラグインの比較もご覧ください。

この記事が気に入ったら、WordPressのビデオチュートリアルについては、YouTubeチャンネルを購読してください。 TwitterFacebookでもフォローできます。

開示:当社のコンテンツは読者によってサポートされています。これは、当社のリンクの一部をクリックすると、当社が手数料を得る可能性があることを意味します。WPBeginnerがどのように資金提供されているか、それがなぜ重要か、そしてどのように私たちをサポートできるかについては、こちらをご覧ください。当社の編集プロセスはこちらです。

究極のWordPressツールキット

無料のツールキットにアクセスしましょう - すべてのプロフェッショナルが持つべきWordPress関連の製品とリソースのコレクションです!

読者とのインタラクション

14 CommentsLeave a Reply

  1. WordPress bodyクラスに関するこれらのヒントとコードを共有していただきありがとうございます。WordPress開発に携わっており、ここでこのクラスを学んでいるところなので、この投稿はWordPressのクラスと関数についてさらに理解するのに役立ちます。

  2. body-class に関する多くの記事を読んだ後、これが最終的に理解できたものです。ありがとうございます。

    個々のページやカテゴリページで動作させることができました。これは素晴らしいです。ユースケースが私にとって違いを生みました。

  3. 素晴らしいヒントです!管理画面で入力できるメニュークラスを body_class に追加する方法を調べています。

    [pre]
    /** ナビゲーションメニューのCSSクラスをbodyクラスに追加 */
    function add_nav_menu_css( $classes ) {
    $classes[] = ‘menu-class-from-admin’;
    return $classes;
    }
    add_filter( ‘body_class’, ‘add_nav_menu_css’ );
    [/pre]

  4. 素晴らしいヒントです。これを試しているのですが、ヘッダーファイルに「page-template page-template-(template file name)」を挿入すると、次のようになります。

    <body >

    そして、次のように CSS を変更します: .page-template-home_corechella

    真っ白なページになってしまいました。何も表示されません。何が間違っているのでしょうか?よろしくお願いします!

  5. カテゴリを使用して投稿を取得するニュースページがあります。コンテンツを幅広く、サイドバーなしにしたいので、特定のクラスを付けたいのですが、どうすればよいですか?

  6. 確かに良い記事で、非常に有益です。質問があります – 例えば、今日ブラウザ固有のボディクラスを追加し、数日後にボディスラッグにページクラスを適用する必要がある場合。その場合、ブラウザ固有のボディクラスで行った設定/CSS は壊れますか、それとも壊れませんか?

返信する

コメントを残していただきありがとうございます。すべてのコメントは、当社のコメントポリシーに従ってモデレーションされますので、ご了承ください。メールアドレスは公開されません。名前フィールドにキーワードを使用しないでください。個人的で有意義な会話をしましょう。