Видаліть класи з body_class


17

Мені не потрібен весь цей безлад занять, як цей ...

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

Я хотів би щось подібне ...

<body class="portfolio">

Чи є десь фрагмент фільтра, у якому є список усіх класів, і я можу потім просто прокоментувати речі, які я не хочу бачити в класі тіла.

Спасибі.


Справжнє питання - чому ви хочете це зробити? Наявність цих додаткових класів не має значення в грандіозній схемі речей, і приємно мати їх для стилізації, якщо ви хочете посилатися на них пізніше.
Отто

3
@ Отто - я можу повністю зрозуміти її / його. Якщо ви збираєтеся пограти, додаючи заняття, наприклад. firebug, тоді справді важко впоратися з цим. FF часто баггі, а ім'я класу, яке ви записуєте, із вікна перегляду. Я сам вимикаю багато занять після та у фізкультурі під час розробки - це полегшує життя.
кайзер

Ага, так, я не використовую 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 );

Хоча дуже гарне робоче рішення, я все-таки вважаю, що «no-js» додано як клас
henrywright

1
Щодо класу no-js - я думаю, це може бути річ BuddyPress. Я буду розслідувати!
henrywright

1
no-jsабо так само, jsяк правило, розбираються з використанням JavaScript / jquery, тому я здогадуюсь, що це був сценарій, який вам потрібно буде відкласти
Брайан Уілліс

no-jsбуде доданий сервером, але видалений зі скриптом, якщо дозволено запускати JavaScript у браузері.
Дейві

4

Я рекомендую просто пропустити <?php body_class(); ?>тег шаблону, якщо у вас немає необхідності в його виведенні.

Просто нанесіть class="portfolio"жорсткий код у <body>тег.


якщо ви хочете розмістити свою тему на репортажі wp.org, то у вас немає цього вибору (лише сторонне позначення).
кайзер

1
LOL, я знаю ... Я переглянув одну або дві теми для сховища WPORG. :) Я припустив, що з цього питання я вважаю, що ця тема призначена для особистого використання, а не загального поширення.
Чіп Беннетт

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 body (наприклад 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' );

Ласкаво просимо до обміну стеками WordPress! Не могли б ви відредагувати свою відповідь , скориставшись посиланням редагування вище та пояснити, що робить цей код, куди ви поставите цей код і чим він відрізняється чи кращий від будь-якого з раніше розміщених відповідей? Відповіді лише на код, як правило, відмовляються без будь-яких пояснень.
Howdy_McGee

0

Якщо ви хочете лише видалити певний клас із тегу body, вам слід це:

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

функція remove_body_class ($ wp_classes) {
    foreach ($ wp_classes як $ key => $ value)
        {
            якщо ($ value == 'portfolio') скасовано ($ wp_classes [$ $]); // Замінює "портфоліо" та видаляє його
        }

    повернути $ wp_classes;
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.