WordPress 不同页面显示不一样的侧边栏

Mar 14th, 2009 Add Comment

本文将告诉你如何在 WordPress 不同的页面显示不同的侧边栏内容. 如: 可以在首页显示 Archives, 但要在其他页面显示 Categories. 为什么要这么做呢? 因为访客在不同的页面会对不一样的内容感兴趣, 在首页可能他们愿意看到目录和索引等内容, 而在单篇文章则会对文章相关内容更加关注. 所以我们可以通过不同的侧边栏 Widgets 来引导访客.

这是个极其简单的主题加工, 本不想多言, 但貌似有些朋友还是不太了解, 所以专门发个文章说说, 老鸟请绕行.

首先要说明的是, 以下操作目前只能通过修改 sidebar.php 或相关代码达到目的. 目前还没发现有这样的插件, 我不知道开发这样一个针对 Widget 的插件是否有价值, 但有兴趣的朋友可以一试.

Okay, 下面我们来个例子吧, 假如现在的 Widget 结构如下:

<div class="widget xxx_widget">
	<h3>Widget Title</h3>
	<ul>
		<li>Item 1</li>
		<li>Item 2</li>
		<li>Item 3</li>
	</ul>
</div>

如果我们要在首页显示 Archives, 单篇文章显示 Categories, 其他页面显示 Meta, 则需要改动代码如下:

<?php if (is_home()) : ?>
	<div class="widget archives_widget">
		<h3>Archives</h3>
		<ul>
			<?php wp_get_archives(); ?>
		</ul>
	</div>
<?php else if (is_single()) : ?>
	<div class="widget categories_widget">
		<h3>Categories</h3>
		<ul>
			<?php wp_list_cats(); ?>
		</ul>
	</div>
<?php else : ?>
	<div class="widget meta_widget">
		<h3>Meta</h3>
		<ul>
			<?php wp_register(); ?>
			<li><?php wp_loginout(); ?></li>
		</ul>
	</div>
<?php endif; ?>

不知道你是否已经注意到, 其实关键在 is_home()is_single() 方法的调用, 通过 if 语句限制显示条件. 你可以将它们换成其他限制条件, 以达到不页面的不同地方显示不同内容的目的, 而不仅仅是侧边栏. 还可以参考一下我发布过的那些主题里 archive.php 文件里 Archive 页面的标题是怎么实现的, 只要这个你弄懂了, 其他的就小菜一碟了.

WordPress 已经为我们提供了足够多的页面筛选方法, 以下一些相关资料:
Codex 关于页面限制方法的说明: WordPress Codex - Conditional Tags
你也可以打开 wp-includes/query.php 查看 WordPress 的源代码.

声明: 本文采用 BY-NC-SA 协议进行授权. 转载请注明转自: WordPress 不同页面显示不一样的侧边栏

  1. http://1.gravatar.com/avatar/32cfec20cabd6126f5a0dac8afcbcee3?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    非常棒,一直纠结于这个问题,找到了一些思路

  2. http://0.gravatar.com/avatar/aaca61303bcdaedb7524e8a72623c077?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    我想把侧边栏去掉

  3. http://1.gravatar.com/avatar/5862e25f0985b70f0e27a16a354d16f9?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    恩,这些is_home一类的函数很简单,却很实用

  4. http://0.gravatar.com/avatar/8eafd7a1d75e9af1da6809fb88f0061a?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    老早就看想弄成这样的,可是不懂 :???:

  5. http://1.gravatar.com/avatar/b8a7d4501b186b9f5bf84a942350ed71?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    多谢,正找这问题呢.

  6. http://0.gravatar.com/avatar/81b9a348bdfa0aa725a4793ee436547a?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    正在寻找,希望一会能看得懂代码... 不知道有没有什么插件可以实现的。

  7. http://0.gravatar.com/avatar/0b66338de67eac4e1644a7b0d987d564?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    Widget Logic 这个插件可以实现

  8. http://0.gravatar.com/avatar/02c877ac17262d4d5c495a64ac8c4962?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G
  9. http://0.gravatar.com/avatar/c6d9b966f17351eaafaa1252d0555dde?s=32&d=http%3A%2F%2F0.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    不错,我也想弄成不一样的,学习一下。

  10. http://1.gravatar.com/avatar/b8c84f8148654c77de2664e0ac55f250?s=32&d=http%3A%2F%2F1.gravatar.com%2Favatar%2Fad516503a11cd5ca435acc9bb6523536%3Fs%3D32&r=G

    不错,收藏了,有空试试

Comment pages
  1. Loading...