WordPress 커스텀 바디 클래스 추가하기

WordPress, GeoDirectory, WooCommerce, Buddypress, BBpress 등에 대한 예제 포함...

WordPress 바디에 클래스 추가하기

많은 경우, 자동 생성된 클래스만으로는 충분하지 않아 커스텀 클래스를 추가해야 할 수 있습니다.

커스텀 클래스를 추가하려면 WordPress 필터를 사용합니다:

  1. body_class

아래에서 가장 많이 요청된 예제들의 스니펫을 소개합니다.

하지만 먼저 초보자들에게 바디 클래스에 대해 좀 더 설명하기 위한 간단한 소개를 드리겠습니다.

WordPress 커스텀 바디 클래스는 모든 WordPress 개발자가 조만간 다루게 될 주제입니다.

대부분의 경우 몇 줄의 코드만 있으면 충분하기 때문에, 이를 위해 플러그인을 사용하는 것은 과한 방법입니다.

그렇다면, WordPress 커스텀 Body 클래스는 어떻게 추가할까요?

WordPress에는 body_class 함수 와 body_class 필터 (훅)가 있습니다.

body_class 함수는 WordPress가 자동으로 생성한 클래스들을 웹사이트의 body 태그에 추가하기 위해 테마에서 사용됩니다.

테마의 header.php 파일에 추가하는 방법은 다음과 같습니다:

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

방문한 페이지에 따라 WordPress는 특정 클래스를 출력합니다.

1) 기본 "Hello World" 포스트의 body 클래스는 다음과 같습니다:

<body class="single single-post postid-1 single-format-standard logged-in admin-bar no-sidebar customize-support">

2) 샘플 페이지의 body 클래스는 다음과 같습니다:

<body class="page page-id-2 page-template-default logged-in admin-bar no-sidebar customize-support">

3) 카테고리 아카이브 페이지의 body 클래스는 다음과 같습니다:

<body class="archive category category-uncategorized category-1 logged-in admin-bar no-sidebar hfeed customize-support">

4) 작성자 아카이브 페이지의 body 클래스는 다음과 같습니다:

<body class="archive author author-admin author-1 logged-in admin-bar no-sidebar hfeed customize-support">

5) 홈페이지의 body 클래스 (홈페이지가 있다고 가정할 경우)

<body class="home blog logged-in admin-bar no-sidebar hfeed customize-support">

위에서 제공된 5가지 예시는 관리자 사용자가 로그인한 상태에서 대부분의 기본 테마에 공통적으로 적용됩니다.

로그아웃 상태에서는 클래스가 약간 다르게 표시됩니다.

HTML의 클래스는 CSS를 통해 웹 페이지를 스타일링하는 데 사용됩니다.

다음 코드 스니펫을 functions.php 파일에 복사하면, 웹사이트 마크업에 새로운 커스텀 body 클래스가 추가됩니다.

body_class 필터를 사용할 것입니다.

WordPress 커스텀 Body 클래스 추가하기

function my_custom_body_class($classes) {<br />
// add 'my-class' to the default autogenerated classes, for this we need to modify the $classes array.<br />
$classes[] = 'my-class';<br />
// return the modified $classes array<br />
return $classes;<br />
}</p>
<p>// add my custom class via body_class filter<br />
add_filter('body_class','my_custom_body_class');

이렇게 하면 웹사이트의 모든 페이지의 body 태그에 새 클래스 "my-class"가 추가됩니다.

<body class="home blog logged-in admin-bar no-sidebar hfeed my-class customize-support">

클래스를 2개 이상 추가해야 한다면 어떻게 하나요?

WordPress 커스텀 body 클래스 2개 이상 추가하기

function my_custom_body_classes($classes) {<br />
// add 'my-class' and 'my-class-2' to the default autogenerated classes, for this we need to modify the $classes array.<br />
$classes[] = 'my-class';<br />
$classes[] = 'my-class-2';<br />
// return the modified $classes array<br />
return $classes;<br />
}</p>
<p>// add my custom classes via body_class filter<br />
add_filter('body_class','my_custom_body_classes');

결과는 다음과 같습니다:

<body class="home blog logged-in admin-bar no-sidebar hfeed my-class my-class-2 customize-support">

특정 페이지에만 CSS로 커스텀 스타일을 적용하기 위해 body 클래스를 추가하고 싶다면 어떻게 하나요?

특정 페이지에 WordPress 커스텀 body 클래스 추가하기

이는 여러 가지 방법으로 수행할 수 있습니다:

1) 페이지 ID를 사용하여 커스텀 body 클래스 추가하기

function my_custom_body_class_id($classes) {<br />
// add 'my-class' only to page with ID 1.<br />
if ( is_page( '1' ) )<br />
$classes[] = 'my-class';<br />
// return the modified $classes array<br />
return $classes;<br />
}</p>
<p>// add my custom class via body_class filter<br />
add_filter('body_class','my_custom_body_class_id');

ID가 2인 페이지에는 이 결과가 적용되며, 다른 모든 페이지에는 커스텀 클래스가 추가되지 않습니다.

<body class="page page-id-2 page-template-default logged-in admin-bar no-sidebar my-class customize-support">

2) 페이지 슬러그를 사용하여 커스텀 body 클래스 추가하기

function my_custom_body_class_slug($classes) {<br />
// add 'my-class' only to page with slug contact-form.<br />
if ( is_page( 'contact-form' ) )<br />
$classes[] = 'my-class';<br />
// return the modified $classes array<br />
return $classes;<br />
}</p>
<p>// add my custom class via body_class filter<br />
add_filter('body_class','my_custom_body_class_slug');

이렇게 하면 슬러그가 contact-form인 페이지에 커스텀 클래스 "my-class"가 추가되며, 다른 모든 페이지에는 커스텀 클래스가 추가되지 않습니다.

3) 페이지 제목을 사용하여 커스텀 body 클래스 추가하기

function my_custom_body_class_title($classes) {<br />
// add 'my-class' only to page with title Contact Form.<br />
if ( is_page( 'Contact Form' ) )<br />
$classes[] = 'my-class';<br />
// return the modified $classes array<br />
return $classes;<br />
}</p>
<p>// add my custom class via body_class filter<br />
add_filter('body_class','my_custom_body_class_title');

이렇게 하면 제목이 Contact Form인 페이지에 커스텀 클래스 "my-class"가 추가되며, 다른 모든 페이지에는 커스텀 클래스가 추가되지 않습니다.

4) 페이지 템플릿을 사용하여 커스텀 body 클래스 추가하기

function my_custom_body_class_template($classes) {<br />
// add 'my-class' only to pages using my custom template.<br />
if ( is_page_template( 'my-custom-page-template' ) )<br />
$classes[] = 'my-class';<br />
// return the modified $classes array<br />
return $classes;<br />
}</p>
<p>// add my custom class via body_class filter<br />
add_filter('body_class','my_custom_body_class_template');

이렇게 하면 my-custom-page-template 템플릿을 사용하는 페이지에 커스텀 클래스 "my-class"가 추가됩니다. 다른 모든 페이지에는 커스텀 클래스가 추가되지 않습니다.

카테고리 또는 태그 페이지에도 ID 또는 카테고리/태그 슬러그를 통해 커스텀 클래스를 추가할 수 있습니다.

카테고리 또는 태그 아카이브에 WordPress 커스텀 body 클래스 추가하기

1) 카테고리

function my_custom_body_class_category($classes) {<br />
// add 'my-class' only to the my-category archive.<br />
if ( is_category( 'my-category' ) )<br />
$classes[] = 'my-class';<br />
// return the modified $classes array<br />
return $classes;<br />
}</p>
<p>// add my custom class via body_class filter<br />
add_filter('body_class','my_custom_body_class_category');

2) 태그

function my_custom_body_class_tag($classes) {<br />
// add 'my-class' only to the my-tag archive.<br />
if ( is_tag( 'my-tag' ) )<br />
$classes[] = 'my-class';<br />
// return the modified $classes array<br />
return $classes;<br />
}</p>
<p>// add my custom class via body_class filter<br />
add_filter('body_class','my_custom_body_class_tag');

이렇게 하면 my-category 카테고리와 my-tag 태그의 아카이브 페이지에만 커스텀 body 클래스가 추가됩니다.

my-category 카테고리의 모든 게시물 단일 페이지 또는 my-tag 태그가 있는 모든 게시물 단일 페이지에 커스텀 body 클래스를 추가할 수도 있습니다.

in_catgeory 및 has_tag 함수를 사용할 것입니다.

1) 카테고리 (아카이브 페이지 및 단일 페이지 모두)

function my_custom_body_class_in_category($classes) {<br />
// add 'my-class' to the my-category archive and single posts of the category.<br />
if ( in_category( 'my-category' ) )<br />
$classes[] = 'my-class';<br />
// return the modified $classes array<br />
return $classes;<br />
}</p>
<p>// add my custom class via body_class filter<br />
add_filter('body_class','my_custom_body_class_in_category');

2) 태그 (아카이브 페이지 및 단일 페이지 모두)

function my_custom_body_class_has_tag($classes) {<br />
// add 'my-class' to the my-tag archive and single posts with that tag.<br />
if ( has_tag( 'my-tag' ) )<br />
$classes[] = 'my-class';<br />
// return the modified $classes array<br />
return $classes;<br />
}</p>
<p>// add my custom class via body_class filter<br />
add_filter('body_class','my_custom_body_class_has_tag');

이 마지막 두 가지 예시는 아카이브 페이지와 단일 페이지 모두에 커스텀 클래스를 추가합니다.

각 게시물에 카테고리 이름을 WordPress 커스텀 body 클래스로 추가하기

각 게시물에 카테고리의 슬러그 이름을 커스텀 body 클래스로 추가하려면 다음 코드 스니펫이 필요합니다:

function my_custom_body_class_category_in_single($classes) {<br />
     if (is_single() || is_category()) {<br />
       global $post;<br />
       foreach((get_the_category($post->ID)) as $category) {<br />
         $classes[] = $category->category_nicename;<br />
       }<br />
     }<br />
     return $classes;<br />
   }<br />
add_filter('body_class','my_custom_body_class_category_in_single');

예를 들어, "여행" 카테고리의 게시물을 방문하는 경우 위 스니펫은 body 클래스 Travel을 추가하므로 각 카테고리의 게시물을 서로 다르게 스타일링할 수 있습니다.

모바일 기기에서 방문할 때 WordPress 커스텀 body 클래스 추가하기

다음을 사용하면 쉽게 할 수 있습니다. wp_is_mobile 함수.

function my_custom_body_class_mobile( $classes ) {<br />
    if ( wp_is_mobile() ) {<br />
        $classes[] = 'mobile';<br />
    }<br />
    return $classes;<br />
}<br />
add_filter( 'body_class', 'my_custom_body_class_mobile' );

커스텀 body 클래스는 플러그인이 생성한 1개 또는 모든 페이지에도 추가할 수 있습니다 (플러그인에 따라 다름).

GeoDirectory

GeoDirectory는 자체 커스텀 body 클래스를 추가합니다. 예를 들어 모든 GeoDirectory 페이지에는 body 클래스 geodir-page가 추가됩니다.

고급 검색 및/또는 커스텀 포스트 타입 애드온이 설치된 경우 다음 클래스들이: geodir_advance_search 및 geodir_custom_posts 각각 추가됩니다.

GD 홈 페이지 예시:

<body class="single single-post postid-1 single-format-standard logged-in admin-bar no-sidebar customize-support">

리스팅 페이지(커스텀 포스트 타입 또는 카테고리 아카이브)에서는 각 커스텀 포스트 타입마다 다른 클래스를 확인할 수 있습니다.

예를 들어 Places에서는 다음과 같은 클래스가 있습니다. post-type-archive-gd_place.

리스팅 상세 페이지에서도 사용된 각 Custom Post Type에 따라 다른 클래스를 확인할 수 있습니다. 예를 들어 Places에서는 다음과 같습니다: single-gd_place.

하지만 경우에 따라 다른 커스텀 바디 클래스가 필요할 수도 있습니다. 몇 가지 예를 살펴보겠습니다:

1) 위치 페이지에 커스텀 바디 클래스 추가

// add extra class via body_class filter<br />
add_filter('body_class', 'gd_location_custom_body_class');</p>
<p>function gd_location_custom_body_class($classes)<br />
{<br />
if (geodir_is_page('location')) {<br />
$classes[] = 'gd-location';<br />
}<br />
// return the modified $classes array<br />
return $classes;<br />
}

동일한 조건부 태그

geodir_is_page()
는 모든 GeoDirectory 페이지에 사용할 수 있습니다. 예를 들어 미리보기 페이지의 경우:

2) 리스팅 미리보기 페이지에 커스텀 바디 클래스 추가

// add extra class via body_class filter<br />
add_filter('body_class', 'gd_preview_custom_body_class');</p>
<p>function gd_preview_custom_body_class($classes)<br />
{<br />
if (geodir_is_page('preview')) {<br />
$classes[] = 'gd-preview';<br />
}<br />
// return the modified $classes array<br />
return $classes;<br />
}

3) 커스텀 바디 클래스를 가격 패키지별 상세 페이지에 추가

 // add extra custom class via body_class filter<br />
add_filter('body_class','gd_price_custom_body_class');<br />
function gd_price_custom_body_class($classes) {<br />
global $post;<br />
if ( $post->package_id == 1) {<br />
$classes[] = 'price-1';<br />
}<br />
elseif ( $post->package_id == 2) {<br />
$classes[] = 'price-2';<br />
}<br />
else {}<br />
// return the modified $classes array<br />
return $classes;<br />
}

4) 커스텀 바디 클래스를 검색된 CPT별 검색 페이지에 추가

add_filter('body_class','gd_search_cpt_custom_body_class');</p>
<p>function gd_search_cpt_custom_body_class($classes) {<br />
if (isset($_GET['stype']) == 'gd_place') {<br />
$classes[] = 'search_gd_place';<br />
}<br />
return $classes;<br />
}

WooCommerce

1) 모든 WooCommerce 페이지에 커스텀 바디 클래스 추가

function my_custom_body_class_woo($classes) {<br />
// add 'my-class' to all woocom pages.<br />
if ( is_woocommerce() )<br />
$classes[] = 'my-class';<br />
// return the modified $classes array<br />
return $classes;<br />
}</p>
<p>// add my custom class via body_class filter<br />
add_filter('body_class','my_custom_body_class_woo');

2) 쇼핑 페이지에만 커스텀 바디 클래스 추가

function my_custom_body_class_woo_shop($classes) {<br />
// add 'my-class' only to the shop page.<br />
if ( is_shop() )<br />
$classes[] = 'my-class';<br />
// return the modified $classes array<br />
return $classes;<br />
}</p>
<p>// add my custom class via body_class filter<br />
add_filter('body_class','my_custom_body_class_woo_shop');

3) 상품 카테고리 페이지에 커스텀 바디 클래스 추가

function my_custom_body_class_woo_cat($classes) {<br />
// add 'my-class' only to the product category archives.<br />
if ( is_product_category() )<br />
$classes[] = 'my-class';<br />
// return the modified $classes array<br />
return $classes;<br />
}</p>
<p>// add my custom class via body_class filter<br />
add_filter('body_class','my_custom_body_class_woo_cat');

4) 특정 상품 카테고리 페이지에 커스텀 바디 클래스 추가

function my_custom_body_class_woo_cat_a($classes) {<br />
// add 'my-class' only to a specific product category archive.<br />
if ( is_product_category( 'my-category' ) )<br />
$classes[] = 'my-class';<br />
// return the modified $classes array<br />
return $classes;<br />
}</p>
<p>// add my custom class via body_class filter<br />
add_filter('body_class','my_custom_body_class_woo_cat_a');

5) 상품 페이지에 커스텀 바디 클래스 추가

function my_custom_body_class_woo_prod($classes) {<br />
// add 'my-class' to product pages.<br />
if ( is_product() )<br />
$classes[] = 'my-class';<br />
// return the modified $classes array<br />
return $classes;<br />
}</p>
<p>// add my custom class via body_class filter<br />
add_filter('body_class','my_custom_body_class_woo_prod');

6) 특정 상품 페이지에 커스텀 body 클래스 추가하기

function my_custom_body_class_woo_prod_a($classes) {<br />
// add 'my-class' only to the my-product single page.<br />
if ( is_product( 'my-product' ) )<br />
$classes[] = 'my-class';<br />
// return the modified $classes array<br />
return $classes;<br />
}</p>
<p>// add my custom class via body_class filter<br />
add_filter('body_class','my_custom_body_class_woo_prod_a');

다음과 같이 WooCommerce 조건부 태그는 다양하게 제공됩니다:

  • 태그 아카이브를 위한 is_product_tag()
  • 장바구니 페이지를 위한 is_cart()
  • 결제 페이지를 위한 is_checkout()
  • 고객 계정 페이지를 위한 is_account_page()

전체 목록은 여기에서 확인할 수 있습니다: https://docs.woothemes.com/document/conditional-tags/

다른 플러그인에서 생성한 페이지에 WordPress 커스텀 body 클래스 추가하기

조건부 태그를 제공하는 모든 플러그인에서 동일하게 적용할 수 있습니다.

예를 들어, bbPress의 조건부 태그는 여기에서 확인할 수 있습니다: https://codex.bbpress.org/bbpress-conditional-tags/

예시가 필요하신가요?

1) 모든 bbPress 페이지에 커스텀 body 태그를 추가하려면 다음이 필요합니다:

function my_custom_body_class_bbpress($classes) {<br />
// add 'my-class' only to bbpress page.<br />
if ( is_bbpress() )<br />
$classes[] = 'my-class';<br />
// return the modified $classes array<br />
return $classes;<br />
}</p>
<p>// add my custom class via body_class filter<br />
add_filter('body_class','my_custom_body_class_bbpress');

BuddyPress의 조건부 태그와 대부분의 인기 플러그인에 대한 조건부 태그도 찾아볼 수 있습니다.

Body 클래스 제거하기

필터를 통해 추가할 수 있는 것처럼 제거도 가능합니다:

function remove_body_class( $classes ) {</p>
<p>foreach ( $classes as $key =&amp;amp;gt; $value ) {<br />
if ( $value == 'my-class' ) unset( $classes[ $key ] );<br />
}</p>
<p>return $classes;</p>
<p>}<br />
add_filter( 'body_class', 'remove_body_class' );

WordPress 웹사이트에서 body 클래스를 추가하거나 제거하는 데 어려움을 겪고 계신가요? 아래 댓글에 구체적인 예시를 요청해 주시면 최대한 답변해 드리겠습니다!

GeoDirectory의 강력한 기능을 활용하세요!

지금 바로 온라인 비즈니스를 시작하세요

오늘 가입하세요!

뉴스레터 - 최신 소식을 받아보세요!

최신 뉴스, 팁, 독점 콘텐츠를 받은 편지함으로 직접 받아보세요.

Paolo 작성

Paolo Tajani is co-founder and marketing lead at AyeCode Ltd, the company behind GeoDirectory, UsersWP, GetPaid, and Blockstrap. He started building with WordPress in 2008 and partnered with Stiofan O'Connor in 2011. Together they've created and marketed themes and plugins now active on over 100,000 websites. He also created wp-rankings.com, a free analytics site tracking every plugin in the WordPress.org repository. A polyglot, Paolo speaks 4 languages: Italian (native), English, French, and Spanish. He reviews AyeCode's translated content in those languages himself, and supervises the native-speaker professionals who review the other languages.

로딩 중...
20% 할인 혜택
서두르세요! 만료되기 전에 20% 할인을 받으세요. 20% 할인 받기