前言:

你是否曾经因为心爱的模板具有某些小瑕疵而“纠结”不已呢?我就囧了这么一回。刚刚实现了侧边栏的动态化(跟随屏幕滚动),但是由于侧边栏只有一个,小工具内容又多,屏幕很难整个容下一个狭长的侧边栏。因此,我开始构思,能否增加一个侧边栏,专门存放那些需要跟随滚动的内容呢。

解决方案:

在开始动手之前,我们需要简单了解一下 wordpress 关于 sidebar (侧边栏)的运行原理。

大多数模板的侧边栏文件通常为 sidebar-*.php ,其中“*”为自定义的名字,对于某些单侧边栏的模板,通常只是命名为 sidebar.php 。我们要增加一个新的侧边栏,就需要按照规定的命名规则建立一个新的侧边栏文件。

不同页面对不同 sidebar 的调用都是通过 get_sidebar() 函数进行的, get_sidebar() 的参数为侧边栏文件名中自定义的部分(即为“*”的部分),默认情况下调用 sidebar.php 。例如我需要在模板 index.php 中调用 sidebar-front.php 文件中定义的侧边栏,只需要在 index.php 中的相应位置加上 get_sidebar( ‘front’ ) 即可。

只是新建侧边栏文件和调用还不够,因为此时 wordpress 程序本身还没有意识到有新的侧边栏加入进来,所以还需要我们对其进行注册。侧边栏的注册一般是在 functions.php 中调用 register_sidebars() 函数进行的,函数的参数为整型,表示侧边栏的数量。例如目前的模板有 n 个侧边栏,我需要增加一个侧边栏,那么侧边栏的总数则为 n + 1 ,只需要调用
register_sidebars( n + 1 ) 即可。

做足了功课,就可以动手实践了。下面以 glossy stlyo 1.04 为例进行演示。

新建侧边栏文件:

在 glossy stlyo 的模板根目录下,只有一个 sidebar.php 文件,此模板为单侧边栏模板。我们新建一个侧边栏文件,命名为 sidebar-2.php ,并将 sidebar.php 中的内容原样复制到 sidebar-2.php 中。接着我们要做一些修改,用以让 wordpress 程序区分两个侧边栏。

修改前的部分内容为:

<div id="sidebar" role="complementary">
	<div id="sidebarhead"></div>
		<div id="sidebarinner">
			<ul>
				<?php 	/* Widgetized sidebar, if you have the plugin installed. */
					if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar() ) : ?>

修改后为:

<div id="sidebar-2"></div>
	<div id="sidebar" role="complementary">
		<div id="sidebarhead"></div>
			<div id="sidebarinner">
				<ul>
					<?php 	/* Widgetized sidebar, if you have the plugin installed. */
						if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar(2) ) : ?>

dynamic_sidebar() 函数的参数为整型,表示加载第 n 个侧边栏。另外在第一行新增的内容是为了给新侧边栏增加一个标示id,用于制作动态侧边栏用,可以无视。

各页面对侧边栏的调用:

这部分比较简单,只需要在原先调用过 get_sidebar() 的文件里再加上你的调用函数即可。例如 glossy stylo 的 index.php 的部分内容如下:

<?php get_sidebar(); ?>
<?php get_footer(); ?>

增加对 sidebar-2.php 的调用,修改后为:

<?php get_sidebar(); ?>
<?php get_sidebar( '2' ); ?>
<?php get_footer(); ?>

侧边栏的注册:

这里需要修改 functions.php 中的内容,例如 glossy stylo 的 functions.php 的部分内容如下:

if ( function_exists('register_sidebar') ) 
{
	register_sidebar
	(
		array
		(
			'before_widget' => '<li id="%1$s" class="widget %2$s">',
			'after_widget' => '</li>',
			'before_title' => '<h2 class="widgettitle">',
			'after_title' => '</h2>',
		)
	);
}

修改为:

if ( function_exists('register_sidebars') )
	register_sidebars(2);

如此一来,新建侧边栏的任务便大功告成。享受成就感带来的快感之前还要明白一个道理,重要的不是去为 blog 新增一个功能,而是在不断折腾的过程中锻炼自己。