我不需要像这样乱七八糟的课程。。。
<body class="page page-id-829 page-template page-template-page-template-portfolio-php portfolio">
<body class="portfolio">
谢谢
我不需要像这样乱七八糟的课程。。。
<body class="page page-id-829 page-template page-template-page-template-portfolio-php portfolio">
<body class="portfolio">
谢谢
您可以配置$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 answer的一个补充(也添加了一个黑名单):)
请将@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\\u 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 );
}
这将为每个页面提供一个只包含“portfolio”的主体类。第一个参数是通常会出现的生成的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 );
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().\'"\';
}
如果只想从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; }
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\\u class()添加类的情况下将一些有用的东西组合在一起,但我遇到了另一种情况,因为这些类是通过JavaScript添加的,所以它们都不起作用。
此外,我只需要删除特定页面上的类,无法通过修改或重写JS来完成这一操作,而不会影响其他页面。
为了解决这个问题,我在函数中添加了以下内容。子主题的php。。。
<?php
// remove body classes not added through the wp body_class() function
// jQuery solution
function cbc_manage_body_classes() {
$to_remove = \'\';
if (is_shop()) { $to_remove .= \'class_one class_two\'; }
if ( ! empty($to_remove)) {
?>
<script type="text/javascript">
jQuery(document).ready(function(){ jQuery("body").removeClass(\'<?php echo $to_remove; ?>\'); });
</script>
<?php
}
}
add_action(\'wp_footer\',\'cbc_manage_body_classes\', 99);
上述jQuery解决方案对我的用例非常有效。对于那些需要/想要一个纯JavaScript解决方案的人,我将其放在一起。。。<?php
// remove body classes not added through the wp body_class() function
// Javascript only solution
function cbc_manage_body_classes() {
$to_remove = \'\';
if (is_shop()) { $to_remove .= \'class_one class_two\'; }
if ( ! empty($to_remove)) {
?>
<script type="text/javascript">
window.onload = function() {
// inspiration from: https://stackoverflow.com/questions/784012/javascript-equivalent-of-phps-in-array
function cbcInArray(needle, haystack) {
var length = haystack.length;
for(var i = 0; i < length; i++) { if(haystack[i] == needle) return true; }
return false;
}
// inspiration from: https://stackoverflow.com/questions/13505253/how-to-remove-the-class-in-javascript
function cbcRemoveClass( elem, name ) {
var classlist = elem.className.split( /\\s/ ),
namelist = name.split( /\\s/ ),
newlist = [],
idx = 0;
for ( ; idx < classlist.length; idx++ ) {
if ( ! cbcInArray(classlist[ idx ], namelist) ) { newlist.push( classlist[ idx ] ); }
}
elem.className = newlist.join(" ");
return true;
}
cbcRemoveClass(document.getElementsByTagName("body")[0], \'<?php echo $to_remove; ?>\');
};
</script>
<?php
}
}
add_action(\'wp_footer\',\'cbc_manage_body_classes\', 99);
?>
为了与大家分享,下面是我为body\\u class()用例所做的工作,使用了我之前发布的想法。此代码与发布的snips的主要区别在于,此代码同时启用白名单和黑名单。
在我为构建这个的情况下,我需要将body类全局限制为特定的集,然后删除特定页面上的其他类。
<?php
//inpsired by: https://wordpress.stackexchange.com/questions/15850/remove-classes-from-body-class
function cbc_body_class_filter( $wp_classes, $extra_classes ) {
// merge $wp_classes and $extra_classes so all classes are subjected to the filtering
$classes = array_merge( $wp_classes, (array) $extra_classes );
// init list(s) of classes (not)allowed
$whitelist = $blacklist = array();
// block/remove body classes on wc shop page
// this block can be repeated for different pages
if (is_shop()) { // is_page(\'PAGE SLUG/NAME/ID\')) {
$blacklisted = array(\'class-one\', \'class-two\');
$blacklist = array_merge($blacklist, $blacklisted);
}
// filter the body classes through the lists
// by filtering the whitelist first we can create a "master" whitelist and then remove other classes on a page by page basis
if ( ! empty($whitelist)) { $classes = array_intersect( $classes, $whitelist ); }
if ( ! empty($blacklist)) { $classes = array_diff( $classes, $blacklist ); }
return $classes;
}
add_filter( \'body_class\', \'cbc_body_class_filter\', 99, 2 );
?>
我是updating the codex page example for action hooks, 在游戏中完成一些可重用的功能(最初是针对这里的一些Q@WA)。但后来我遇到了一个以前没有意识到的问题:在挂接到一个函数以修改变量的输出后,我再也无法决定是要回显输出还是只返回它。The Problem: 我可以修改传递给do_action 用回调函数钩住。使用变量修改/添加的所有内容仅在回调函数中可用,但在do_action 在原始函数内部调用。很高兴:我将其修改为一个工作示例,因此您可以将其复制/粘贴