body_class에서 클래스 제거


17

나는 이런 클래스의 혼란이 필요하지 않습니다 ...

<body class="page page-id-829 page-template page-template-page-template-portfolio-php portfolio">

나는 이런 식으로하고 싶습니다 ...

<body class="portfolio">

어딘가에 모든 클래스 목록이있는 필터 스 니펫이 있습니까? 그런 다음 본문 클래스에서보고 싶지 않은 내용의 주석 처리를 제거 할 수 있습니다.

감사.


진짜 질문은 왜 그렇게하고 싶습니까? 추가 클래스를 갖는 것은 웅대 한 사물 체계에서 중요하지 않으며 나중에 참조하려는 경우 스타일을 지정하는 것이 좋습니다.
— Otto

3
@ 오토-나는 그녀 / 그를 완전히 이해할 수 있습니다. 예를 들어 클래스를 추가하여 놀러 갈 것입니다. 방화범, 처리하기가 정말 어렵습니다. FF는 종종 버그가 있으며 뷰포트에서 쓰는 클래스 이름입니다. 나는 스스로 개발하는 동안 많은 포스트 클래스와 바디 클래스를 끈다.
— kaiser

아, 예, Firebug를 사용하지 않습니다. 그것의 인터페이스는 비참하다.
— Otto

답변:


31

$whitelist이 함수에서 원하지 않는 다른 모든 클래스를 필터링 하도록 배열을 구성 할 수 있습니다 .

add_filter( 'body_class', 'wpse15850_body_class', 10, 2 );

function wpse15850_body_class( $wp_classes, $extra_classes ) {

    // List of the only WP generated classes allowed
    $whitelist = array( 'portfolio', 'home', 'error404' );

    // Filter the body classes
    $wp_classes = array_intersect( $wp_classes, $whitelist );

    // Add the extra classes back untouched
    return array_merge( $wp_classes, (array) $extra_classes );
}

15

@Geert 답변에 추가 (블랙리스트도 추가) :)

@Geert의 답변을 해결책 (이것이 아닌)으로 표시하십시오.

function wpse15850_body_class( $wp_classes, $extra_classes )
{
    // List of the only WP generated classes allowed
    $whitelist = array( 'home', 'blog', 'archive', 'single', 'category', 'tag', 'error404', 'logged-in', 'admin-bar' );

    // List of the only WP generated classes that are not allowed
    $blacklist = array( 'home', 'blog', 'archive', 'single', 'category', 'tag', 'error404', 'logged-in', 'admin-bar' );

    // Filter the body classes
    // Whitelist result: (comment if you want to blacklist classes)
    $wp_classes = array_intersect( $wp_classes, $whitelist );
    // Blacklist result: (uncomment if you want to blacklist classes)
    # $wp_classes = array_diff( $wp_classes, $blacklist );

    // Add the extra classes back untouched
    return array_merge( $wp_classes, (array) $extra_classes );
}
add_filter( 'body_class', 'wpse15850_body_class', 10, 2 );

매우 훌륭한 작업 솔루션이지만 여전히 'no-js'가 클래스로 추가 된 것을 발견했습니다.
— henrywright

1
no-js 클래스와 관련하여 BuddyPress 일 수 있습니다. 조사하겠습니다!
— henrywright

1
no-js또는 마찬가지로 js일반적으로 javascript / jquery를 사용하므로 처리해야 할 스크립트라고 생각합니다.
— Bryan Willis

no-js는 서버에 의해 추가되지만 javascript가 브라우저에서 실행될 수 있으면 스크립트로 제거됩니다.
— Davey

4

<?php body_class(); ?>출력이 필요없는 경우 템플릿 태그를 생략하는 것이 좋습니다 .

태그에 class="portfolio"하드 코딩 된 내용 만 적용 하십시오 <body>.


wp.org 리포지토리에서 테마를 호스팅하려면이 선택 사항이 없습니다 (단지 참고 사항).
— kaiser

1
LOL, 알아요 ... WPORG 저장소에 대한 테마를 한두 가지 검토했습니다. :) 그러나이 주제는 일반적인 대중 배포가 아닌 개인적 사용을위한 것입니다.
— Chip Bennett

2

제거하려는 CSS의 클래스를 $ class_delete에 배치하십시오.

add_filter( 'body_class', 'wpse15850_body_class', 10, 2 );

function wpse15850_body_class( $wp_classes, $extra_classes ) {

    # List tag to delete
    $class_delete = array('tag');

    # Verify if exist the class of WP in $class_delete
    foreach ($wp_classes as $class_css_key => $class_css) {
        if (in_array($class_css, $class_delete)) {
            unset($wp_classes[$class_css_key]);
        }
    }

    // Add the extra classes back untouched
    return array_merge( $wp_classes, (array) $extra_classes );
}

1

이렇게하면 모든 페이지에 '포트폴리오'의 바디 클래스 만 제공됩니다. 첫 번째 인수는 일반적으로 표시되는 생성 된 본문 클래스의 배열입니다. 두 번째 인수는 본문 클래스 함수에 전달 된 클래스의 배열입니다 (예 : body_class('portfolio');이 함수에서 두 번째 인수를 만듭니다 array( 'portfolio' )).

function wpse15850_body_classes( $classes, $class ){
    return array( 'portfolio' );
}

add_filter( 'body_class', 'wpse15850_body_classes', 10, 2 );

1
Try the following...

function var_template_include( $t ){
    $basename = basename($t);
    $templatename = substr($basename, 0,strrpos($basename,'.')); 
    $GLOBALS['current_theme_template'] = $templatename;

    return $t;
}
add_filter( 'template_include', 'var_template_include', 1000 );


function current_template( $echo = false ) {
    if( !isset( $GLOBALS['current_theme_template'] ) ) {
        return false;
    } if( $echo ) {
        echo $GLOBALS['current_theme_template'];
    } else {
        return  $GLOBALS['current_theme_template'];
    }   
}

function body_template_as_class() {
echo 'class="'.current_template().'"';
}

1
function alpha_remove_class($wp_classes){
  unset( $wp_classes[ array_search( "first_class", $wp_classes ) ] );

  return $wp_classes;
}
add_filter( 'body_class', 'alpha_remove_class' );

워드 프레스 스택 교환에 오신 것을 환영합니다! 당신이 만족 할 수 편집 답을 사용하여 편집 링크 위를하고이 코드가 무엇을 설명, 당신은이 코드를 어디에 둘 것, 그것은 이전에 게시 된 응답의 다른 또는 더 나은 방법? 코드 전용 답변은 일반적으로 설명없이 권장하지 않습니다.
— Howdy_McGee

0

body 태그에서 특정 클래스 만 제거하려면 다음을 수행하십시오.

add_filter ( 'body_class', 'remove_body_class', 20, 2);

함수 remove_body_class ($ wp_classes) {
    foreach ($ wp_classes를 $ key => $ value)
        {
            if ($ value == 'portfolio') unset ($ wp_classes [$ key]); // "포트폴리오"를 대체하고 제거
        }

    $ wp_classes를 반환;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.