我想添加一个主体类,这取决于哪些侧栏处于活动状态,如果我的前标题小部件区域处于活动状态,则添加一个主体类。我已经把它做好了,但我只想知道是否有更好的方法把它写成我的before header widget area function
出于某种原因,需要超越我的sidebar function
, 否则,我的sidebar function
如果我的before header widget area function
处于活动状态。所以我肯定在那里的某个地方有一些不好的实践代码。
以下是有效的:
// add body class if before-header-widget is active
add_filter( \'body_class\', \'body_class_before_header\' );
function body_class_before_header( $classes ) {
if ( is_active_sidebar( \'before-header-widget-area\' ) ) {
$classes[] = \'before-header\';
return $classes;
}
}
// add body classes for sidebars
add_filter( \'body_class\', \'body_class_layouts\' );
function body_class_layouts( $classes ) {
// add body class if both sidebars are active
if ( is_active_sidebar( \'sidebar-right\' ) && is_active_sidebar( \'sidebar-left\' ) ) {
$classes[] = \'sidebar-content-sidebar\';
return $classes;
}
// add body class for if right sidebar is active
elseif ( is_active_sidebar( \'sidebar-right\' ) ) {
$classes[] = \'content-sidebar\';
return $classes;
}
// add body class for if left sidebar is active
elseif ( is_active_sidebar( \'sidebar-left\' ) ) {
$classes[] = \'sidebar-content\';
return $classes;
}
// add body class if no sidebars are active
else {
$classes[] = \'full-width-content\';
return $classes;
}
}
但如果我只是以另一种方式交换函数:
// add body classes for Sidebars
add_filter( \'body_class\', \'body_class_layouts\' );
function body_class_layouts( $classes ) {
// add body class if both sidebars are active
if ( is_active_sidebar( \'sidebar-right\' ) && is_active_sidebar( \'sidebar-left\' ) ) {
$classes[] = \'sidebar-content-sidebar\';
return $classes;
}
// add body class for if right sidebar is active
elseif ( is_active_sidebar( \'sidebar-right\' ) ) {
$classes[] = \'content-sidebar\';
return $classes;
}
// add body class for if left sidebar is active
elseif ( is_active_sidebar( \'sidebar-left\' ) ) {
$classes[] = \'sidebar-content\';
return $classes;
}
// add body class if no sidebars are active
else {
$classes[] = \'full-width-content\';
return $classes;
}
}
// add body class if before-header-widget is active
add_filter( \'body_class\', \'body_class_before_header\' );
function body_class_before_header( $classes ) {
if ( is_active_sidebar( \'before-header-widget-area\' ) ) {
$classes[] = \'before-header\';
return $classes;
}
}
如果
before-header-widget
处于活动状态。我不想要我的
sidebars function
与我的
before-header-widget
作用感谢您的帮助。
最合适的回答,由SO网友:David 整理而成
我认为没有更聪明的方法以过程风格编写此代码,因此基本上您的代码看起来不错。
但是你的body_class_before_header()
可能导致问题的函数:如果未执行条件块,函数将返回NULL
但由于它是对过滤器的回调,因此它应始终至少返回未过滤的参数值:
// add body class if before-header-widget is active
add_filter( \'body_class\', \'body_class_before_header\' );
function body_class_before_header( $classes ) {
if ( is_active_sidebar( \'before-header-widget-area\' ) ) {
$classes[] = \'before-header\';
//don\'t return here (only)
}
//return $classes anyway
return $classes;
}
也许还有一个小小的语法改进。
function body_class_layouts( $classes ) {
// add body class if both sidebars are active
if ( is_active_sidebar( \'sidebar-right\' ) && is_active_sidebar( \'sidebar-left\' ) ) {
$classes[] = \'sidebar-content-sidebar\';
}
// add body class for if right sidebar is active
elseif ( is_active_sidebar( \'sidebar-right\' ) ) {
$classes[] = \'content-sidebar\';
}
// add body class for if left sidebar is active
elseif ( is_active_sidebar( \'sidebar-left\' ) ) {
$classes[] = \'sidebar-content\';
}
// add body class if no sidebars are active
else {
$classes[] = \'full-width-content\';
}
return $classes;
}
我删除了所有
return
语句,并将其移动到函数末尾。这可能有助于避免
NULL
在特定条件下返回。