web-dev-qa-db-ja.com

Body_class()関数でクラスを削除して追加する

テーマのデフォルトのボディクラスを削除して新しいクラスを追加したいです。

私はこれを行うためにこのコードを使用します。

//REMOVE / ADD HOME CLASS FROM BODY

add_filter('body_class', function (array $classes) {
    if (in_array('home', $classes)) {
      unset( $classes[array_search('home', $classes)] );
    }
  return $classes;
});

add_filter('body_class', function (array $classes) {
    if (in_array('blog', $classes)) {
      unset( $classes[array_search('blog', $classes)] );
    }
  return $classes;
});



add_action( 'body_class', 'my_custom_class');
function my_custom_class( $classes ) {
  $classes[] = 'my-custom-class';
  return $classes;
}

このコードは、2つのデフォルトクラスが消えて新しいクラスが表示されるため機能しますが、style.cssに "my_custom_class"を作成するとCSSは機能しません。

私は例えばマージンを修正しようとしました、私はこのコードを使います:

.my_custom_class {
    margin-top: 350px !important;
}

しかし現場では変更はありません。

3
Crashy

my_custom_class()関数はクラス名my-custom-classを使用していますが、CSSはクラスmy_custom_classをターゲットにしています。これら2つの文字列はまったく同じでなければなりません。

.my-custom-class {
    margin-top: 350px !important;
}

また、すべてのbody_classのものを単一のコールバック関数で処理する方が少しきれいです。

add_action( 'body_class', 'my_custom_class');
function my_custom_class( $classes ) {
    // Remove 'blog' class
    if (in_array('blog', $classes)) {
        unset( $classes[array_search('blog', $classes)] );
    }

    // Remove 'home' class
    if (in_array('home', $classes)) {
        unset( $classes[array_search('home', $classes)] );
    }

    // Add custom class
    $classes[] = 'my-custom-class';

    return $classes;
}
1
Dave Romsey