WordPress 不同页面显示不一样的侧边栏
本文将告诉你如何在 WordPress 不同的页面显示不同的侧边栏内容. 如: 可以在首页显示 Archives, 但要在其他页面显示 Categories. 为什么要这么做呢? 因为访客在不同的页面会对不一样的内容感兴趣, 在首页可能他们愿意看到目录和索引等内容, 而在单篇文章则会对文章相关内容更加关注. 所以我们可以通过不同的侧边栏 Widgets 来引导访客.
这是个极其简单的主题加工, 本不想多言, 但貌似有些朋友还是不太了解, 所以专门发个文章说说, 老鸟请绕行.
首先要说明的是, 以下操作目前只能通过修改 sidebar.php 或相关代码达到目的. 目前还没发现有这样的插件, 我不知道开发这样一个针对 Widget 的插件是否有价值, 但有兴趣的朋友可以一试.
Okay, 下面我们来个例子吧, 假如现在的 Widget 结构如下:
1 2 3 4 5 6 7 8 | <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, 则需要改动代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | <?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 的源代码.

沙发..
对了边侧栏最新日志是否可以直接用wp_get_recent_posts(数量)?
导航条也修改了哦~
谢谢mg12,辛苦了
很受启发。如果有时间,一定要试试下。问一下,像你例子里这样子后,如果再在后台添加widgets,是否每个页面都显示呢?
謝謝很受用。
我也想问ibuffalo问题
我都后台添加的widget
@yinheli
没有这个函数吧, 我是用 get_posts 获取后自己加工的.
@LouisMc
Nice 吧. 哇哈哈~
@渴望飞翔的鱼
不谢.
@ibuffalo, @流星
不行, 但是你可以加到 if ( !function_exists('dynamic_sidebar') || !dynamic_sidebar('north_sidebar') ) 以外部分, 就不会被后台 Widgets 功能影响, 但是像一般的方式是不行的, 希望有人做这样的插件吧.
In english, please!!!
我用另外一个方法实现了,貌似比你这麻烦。
http://willerce.com/post/24/
HOHO... 我有时跑到你这来, 直接研究你这里的源码, "偷" 到不少好东西!
PS: 现在这样的导航, 灰常 nice!
不错,不错,学习中,
hiphone一天学习一点
jQuery Menu 看来iNove越来越完美了~
如果能原生支持jQuery ajax提交评论那就更好了~
我想问问INOVE下一版本啥时候出呢?有时候去网吧打开你的站点有点卡。是空间的事还是文章多了就容易卡?目前我的站点就是有点慢。有的用了INOVE如果文章不多的就快多了。
还有就是右上角的订阅的东东可以做个选项要不要放着.由用的人来决定.生活快乐.
@Willy
Gm will be more and more well-known and there will be a lot of foreigners come here.
If our dear gm writing tutorials in both English and Chinese languages, then, will be better^^
GM,将Categories做到导航栏并能下拉菜单,建立子级Categories页面的教程什么时候有空写呢?严重期待ing
顶部的导航做的不错,偷去用咯
非常不错的讲解,非常受益
@Willy
Is there necessary to build an English blog? My English is very poor...
@willerce
我以前看过你的, 你那样其实是用了两个侧边栏了.
@达米安
呵呵~
@吖Bee
可能会令你失望, iNove 主题是不会集成 jQuery 的.
@笨猫
不会吧.
@服装印花
下个版本有这功能.
@Rui
想累死我是吧? 找个人帮我翻译得了.
顶部的导航导航怎么改撒?
那样好看多了
用TW访问你的站点经常假死
@5mu
TW上一个版访问主页会假死
现在这个最新版访问文章页
也会假死
@laomao
叫 LavaLamp, 请 Google 之.
@5mu
TW 是什么?
@mg12
世界之窗浏览器(The World)
这个收藏了先。
恩,这个实用。
导航栏很酷,能分享不?
@mg12
看吧,那么多人要你的导航栏了……
这个博客做的真漂亮了。Wordpress就不会用啊。
其实 so easy 啊.. 和三栏差不太多..
其实对我们这些对网页语言,设计一窍不通的人来讲,这样的文章尤其实用。呼唤更多像您这种极简单的主题修改文章面世!
@thewise 比如我的文章嵌套评论一直有着巨大问题,框大无嵌套,如果您有空,是否可以抽出点小空来给我帮下忙,不胜感激!
恩,很好,这样WP可以有更好的定制性了。。
希望你的下一个主题有这样的功能!
不错,学习了
学习学习
please using english.
不知道为什么,IE6下用iNove侧边栏会被撑到下面去?俺新建的blog啥也没改动
我就想widget可以支持这样。
不知道新版的widget行不行。
@爱锵锵
真的
刚找到一款插件来实现这个效果~
叫Widget Logic
没有友情链接啊 .... 不知道怎么加这个代码
您好,看了你的博客,做的非常漂亮,所以想请你帮我做一个博客!付费也可以。。。我的QQ:332107579
@chancat
不会吧, 那 TW 只是 IE 的外壳而已, IE 没问题它不应该有问题的.
@HK
@Showfom
http://www.neoease.com/lavalamp-for-wordpress-users/
@elvenchun
不会就学啊, 哈哈~
@thewise
以后会有更多的.
@刘军
已经加了你 QQ.
kwg kwg
汗,早点看到这篇文章就好了 囧,偶回头去改改。。
如何让侧边栏变窄些???
为啥,偶那边做判断,例如index显示A,single显示B,设置了之后,所有的页面死活只显示index那设置的A! 囧 为啥啊。。。。
很不错 学习了!