我学习 WordPress主题开发。我正在主题侧边栏部分添加小部件。我正在使用 Bootstrap面板来显示小部件内容。
我的代码是:
add_action( 'widgets_init', 'mytheme_widgets_init' );
function mytheme_widgets_init() {
register_sidebar( array(
'name' => __( 'Main Sidebar', 'mytheme' ),
'id' => 'sidebar_main',
'description' => __( 'Sidebar main widget' ),
'before_widget' => '<div id="%1$s" class="panel panel-primary widget_sidebar_main clearfix %2$s">',
'after_widget' => '</div></div>',
'before_title' => '<div class="panel-heading"><h3 class="panel-title">',
'after_title' => '</h3></div><div class="panel-body">',
));
}
使用管理面板在Widget中添加标题和内容时工作正常。
但是当我没有输入标题时,它会创建一个额外的&lt; / div&gt; 。 这种情况是无效的HTML。
如何解决这个问题。
答案 0 :(得分:0)
您可以使用widget_title
过滤器检查标题是否存在,并相应地添加标记:
add_action( 'widgets_init', 'mytheme_widgets_init' );
function mytheme_widgets_init() {
register_sidebar( array(
'name' => __( 'Main Sidebar', 'mytheme' ),
'id' => 'sidebar_main',
'description' => __( 'Sidebar main widget' ),
'before_widget' => '<div id="%1$s" class="panel panel-primary widget_sidebar_main clearfix %2$s">',
'after_widget' => '</div></div>',
'before_title' => '',
'after_title' => '',
));
}
add_filter( 'widget_title', 'mytheme_widget_title_filter' );
function mytheme_widget_title_filter( $title ) {
$title = $title ?
'<div class="panel-heading"><h3 class="panel-title">'.$title.'</h3></div>' : '';
$title .= '<div class="panel-body">';
return $title;
}
<强>更新强>
如果您只想将以前的过滤器功能应用于主侧边栏,请在显示侧边栏之前添加它,然后立即将其删除:
<?php
add_filter( 'widget_title', 'mytheme_widget_title_filter');
dynamic_sidebar( 'sidebar_main' );
remove_filter( 'widget_title', 'mytheme_widget_title_filter');
?>