Удалить классы из класса тела
Мне не нужна вся эта путаница классов, как эта...
<body class="page page-id-829 page-template page-template-page-template-portfolio-php portfolio">
Я бы хотел что-то вроде этого...
<body class="portfolio">
Есть ли где-нибудь фрагмент фильтра, в котором есть список всех классов, и я могу просто раскомментировать то, что я не хочу видеть в классе body.
Спасибо.
8 answers
Вы можете настроить массив $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 );
}
Просто дополнение к ответу @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 );
Я бы рекомендовал просто опустить тег шаблона <?php body_class(); ?>
, если вам не нужен его вывод.
Просто примените class="portfolio"
жестко закодированный в тег <body>
.
Просто поместите классы вашего 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 );
}
Это даст каждой странице класс тела только "портфолио". Первый аргумент - это массив сгенерированных классов тел, которые обычно появляются. Второй аргумент - это массив классов, переданных в функцию класса тела (например, body_class('portfolio');
будет вторым аргументом в этой функции array( 'portfolio' )
).
function wpse15850_body_classes( $classes, $class ){
return array( 'portfolio' );
}
add_filter( 'body_class', 'wpse15850_body_classes', 10, 2 );
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().'"';
}
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' );
Если вы хотите удалить только определенный класс из тега body, вам следует сделать следующее:
add_filter('body_class', 'remove_body_class', 20, 2); function remove_body_class($wp_classes) { foreach($wp_classes as $key => $value) { if ($value == 'portfolio') unset($wp_classes[$key]); // Replaces "portfolio" and removes it } return $wp_classes; }