侧栏与小工具(上):register_sidebar 与 dynamic_sidebar

作者: admin 分类: wordpress主题制作教程 发布时间: 2026-11-06 18:33

后台能拖拽的“小工具”是怎么来的

在 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。

caogenbj 的一个问题

看它的 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 到底怎么用。

本系列导航

相关文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Powered by 草根站长笔记 © 2015-2026 草根站长笔记 Inc.版权所有,禁止转载