在 WordPress 后台“外观 → 小工具”里,可以往侧栏拖各种东西(搜索框、分类、最新文章、自定义 HTML)。这些不是主题写死的,而是主题注册了“侧栏位置”,后台往里填。
跟导航一样的思路:注册位置 → 后台填内容 → 模板输出。
在 functions.php 里:
register_sidebar( array(
'name' => '网站右边侧边栏',
'id' => 'siderbar-right',
'description' => '网站右边的侧边栏',
'before_widget' => '<div class="panel panel-primary">',
'after_widget' => '</div>',
'before_title' => '<div class="panel-heading">',
'after_title' => '</div>',
) );
关键参数:
id:代码里用这个 id 指定;before_widget / after_widget:每个小工具外面包什么;before_title / after_title:小工具标题外面包什么。caogenbj 用 Bootstrap 的 panel 结构,所以 before_widget 包了一层 <div class="panel panel-primary">,标题包成 panel-heading。这样小工具的外观就直接跟主题统一了。
在 sidebar.php 里:
<?php if ( is_active_sidebar( 'siderbar-right' ) ) : ?>
<?php dynamic_sidebar( 'siderbar-right' ); ?>
<?php endif; ?>
两行:
is_active_sidebar:这个位置有没有填东西(没有就不输出空壳);dynamic_sidebar:把填的东西输出出来。那层 if 很有用:如果后台没填任何小工具,就直接不输出,避免页面上出现一个空的 panel。
看它的 sidebar.php:
<?php if ( is_active_sidebar( 'siderbar-right' ) ) : ?>
<?php dynamic_sidebar( 'siderbar-right' ); ?>
<?php else: ?>
//提示用户
//或者,显示一些默认的边栏效果
<?php endif; ?>
else 分支里只有两行注释,什么都不输出。这意味着:后台没填小工具时,侧栏是一片空白。
虽然不会报错,但体验不好。更好的做法是在 else 里放一点默认内容(比如“暂无内容”),或者干脆不写 else。
一个主题常有多个侧栏(首页一个、文章页一个、页脚一个)。注册多个:
register_sidebar( array( 'name' => '首页侧栏', 'id' => 'home-sidebar', ... ) );
register_sidebar( array( 'name' => '文章页侧栏', 'id' => 'single-sidebar', ... ) );
然后在不同模板里调不同的 dynamic_sidebar( 'xxx' )。
一句话记住:register_sidebar 注册位置(functions.php),dynamic_sidebar 输出(sidebar.php),外面套 is_active_sidebar 判空。
下一篇讲小工具的输出结构——before_widget 和 before_title 到底怎么用。