body_classからクラスを削除します


17

このようなクラスの混乱は必要ありません...

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

このようなものが欲しい...

<body class="portfolio">

すべてのクラスのリストを含むフィルタースニペットがあり、bodyクラスに表示したくないもののコメントを外すことができます。

ありがとう。


本当の質問は、なぜそれをしたいのですか?これらの余分なクラスを持つことは、物事の壮大な計画では重要ではありません。後で参照したい場合は、スタイリングのためにそれらを持っていると便利です。
オットー

3
@Otto-私は彼女/彼を完全に理解できます。たとえば、クラスを追加して遊ぶ場合 firebug、これを扱うのは本当に難しいです。多くの場合、FFはバグが多く、ビューポートから書き出すクラス名です。開発中は多くのポストクラスとボディクラスをオフにします。
kaiser

ああ、はい、私はFirebugを使いません。そのインターフェイスは嘆かわしいです。
オットー

回答:


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 );

非常に優れた実用的なソリューションが、私はまだクラスとして追加された「無jsの」が見つかりません
henrywright

1
no-jsクラスに関しては-BuddyPressの問題かもしれません。調査します!
ヘンリーライト14年

1
no-jsまたは同様にjs、通常は、Javascript / jQueryを使用して扱っている私はあなたがデキューする必要があるだろうということだったスクリプト推測しているので
ブライアン・ウィリスの

no-jsサーバーによって追加されますが、ブラウザでjavascriptの実行が許可されている場合はスクリプトで削除されます。
デイビー

4

<?php body_class(); ?>出力が必要ない場合は、単にテンプレートタグを省略することをお勧めします。

タグにclass="portfolio"ハードコードを適用するだけ<body>です。


wp.​​orgリポジトリでテーマをホストしたい場合、この選択肢はありません(単なる補足です)。
カイザー

1
LOL、私は知っています... WPORGリポジトリの1つまたは2つのテーマをレビューしました。:)しかし、私はこのテーマは一般的な公開配布ではなく、個人的な使用を目的としていると考えました。
チップベネット

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

これにより、すべてのページに「ポートフォリオ」のみのボディクラスが与えられます。最初の引数は、通常表示される生成されたボディクラスの配列です。2番目の引数は、bodyクラス関数に渡されるクラスの配列です(たとえばbody_class('portfolio');、この関数で2番目の引数を作成します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' );

WordPress Stack Exchangeへようこそ!上記の編集リンクを使用して回答編集し、このコードが何をするのか、このコードをどこに置くのか、以前に投稿された回答とどのように異なるか、または改善するのかを説明してください。通常、コードのみの回答は説明なしで推奨されません。
Howdy_McGee

0

bodyタグから特定のクラスのみを削除する場合は、これを行う必要があります。

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

関数remove_body_class($ wp_classes){
    foreach($ wp_classes as $ key => $ value)
        {
            if($ value == 'portfolio')unset($ wp_classes [$ key]); //「ポートフォリオ」を置き換えて削除します
        }

    return $ wp_classes;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.