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.