WordPress Widget
一個 widget 不能出現在兩個 sidebar 上 ?
昨天換了新的 theme、啟動 widget 以後,我發現了一個小問題:它的 sidebar 不管在哪一頁都是同一組。這問題其實還蠻困擾我的,因為有些東西我會放在首頁但是不想放在單篇文章的頁面,例如說 Links,或是 Recent Comments / Trackbacks 之類的。
在努力了一陣子之後,我發現其實 widget 系統可以設定多個 sidebar,以目前我用的這個 theme GlossyBlue
為例,要把它從 1 個 sidebar 變成 2 個 sidebar,有幾個小地方要改;首先是 functions.php
,本來是
,改成 register_sidebar(array(
,這意思就是在系統裡註冊兩個 sidebar,你進 register_sidebars(2, array(Presentation -> Sidebar Widgets 看就會看到 Sidebar 1
和 Sidebar 2
;事情還沒完,你還得要去改 sidebar.php
,把
改成 dynamic_sidebar()
,指定要用 Sidebar 1。dynamic_sidebar(1)
對 WordPress 的 theme 有點了解的人應該會知道其實 theme 裡幾乎可以完全靠 index.php 來處理包括首頁 / 單篇文章 / 彙整頁面 / 特殊頁面等等,不過為了讓結構單純一點,也可以把這些功能分離出來,變成
、index.php
、single.php
、archives.php
分別處理;GlossyBlue 就是這麼做的。而在它的設計裡,上面那四種頁面的處理流程基本上就是 page.phpget_header() -> content -> get_sidebar() -> get_footer(),而
就是去呼叫 get_sidebar()sidebar.php;也就是說,在原本的設計裡大家都用 Sidebar 1 (在 sidebar.php 裡設定的)。而如果想讓四種頁面分別有不同的 sidebar,也很簡單,就是不要去呼叫 get_sidebar(),自己處理就是了:把 single.php 最下面的
改成 get_sidebar()
,也就是叫它使用 Sidebar 2。if ( function_exists('dynamic_sidebar') ) dynamic_sidebar(2);
到了這裡,我本來以為問題解決了,很高興地開始要設定不同 sidebar 的時候,突然驚覺在 WordPress Widget 系統裡面,除了 text 和 RSS widget 以外,其他的 widget 只能出現一次,如果把它放在 Sidebar 1 就不能放在 Sidebar 2;原先的設計可能沒有考慮到我上面講的那種用法吧,可能只有考慮到三欄式設計 (其中兩欄設為 sidebar),在這種情況下確實是不會有重複出現的需求 (不會有人想在同一頁看到兩個日曆吧 ?) 為了解決這問題,我又開始到處翻資料,找到前人寫的一個 plugin JAW Duplicate Widgets
,可以任意 copy widget (不過好像不是每種 widget 都可以 copy 成功),這樣我的問題就解決掉大部份啦 :)
Comments
Comment from Neil
Date: 2007/2/17, 11:57 上午
可以試試用sidebar modules取代sidebar widgets,就能設定每頁的sidebar有不同內容。
Comment from V!c
Date: 2007/2/23, 11:52 上午
呃….閱讀全文內的sidebar位置歪掉了…Category的點也跑了出來…
還有,catpcha認證的部分是亂碼…
Comment from leafboy
Date: 2007/3/29, 11:15 下午
我有用個sidebar widgets 同sidebar modules, 本身覺得sidebar modules 好用 小小.
問題就係度. 用佐的2個or 3 個sidebar既theme ,係sidebar modules 度只會show到一個[sidebar widgets 都係]
咁有冇的plug in 可以整到display到返有幾多個sidebar.
因為如果用blog 主既方法,下下change theme 都要change code 會冇咁方便.
一個wordpress 新手.
Comment from Yorick
Date: 2007/6/20, 4:00 下午
还有另一个办法就是修改模板里sidebar.php的代码,然后保持WP的Widgets为默认状态就可以,当然如果需要更换模板就得重新改写新模板的代码了。
我自己有个疑问是,wordpress Widgets功能里的文本“TEXT”不能放PHP代码,不知道可以通过什么办法不修改主页代码来实现在Widgets里加上PHP代码,不知道我表达清楚没有 :(
另外你的comment框的文字太小了
Comment from Yorick
Date: 2007/6/20, 4:03 下午
对不起,发现自己理解错误,你所说的是WP自身的Widgets功能。我自己用的是可以支持Widgets的模板。
Comment from 胡戈戈
Date: 2008/4/24, 11:28 下午
直接修改sidebar.php就可以了
Pingback from Blog Sidebar的順序… at 蘋果豬日記V3.2
Date: 2008/6/21, 11:22 下午
[...] 目前主流blog的組成大概都是這樣,不同頁可能主文的部分是首頁、單一文章、Archive、Tag之類的,或者顯示不同sidebar,但是大體上而言就是這樣了。 [...]

Write a comment