WordPress支持小工具,小工具组成侧边栏,但是大多数主题都是整个网站共用一个侧边栏,这往往让一些有特殊需求的人头疼。比如,你想在某个页面的侧边栏上单独投放广告,你想在某个页面的侧边栏显示特定的超链接,或者你只是想DIY一些特定的图片和文字,等等。
这里有实现WordPress在不同页面显示不同小侧边栏的两种方法。
插件:Widget Logic
发现这样一个插件 Widget Logic 十分方便,可以给每一个小工具添加简单的判断代码,让它们在不同的页面显示不同的小工具。
开启之后,每一个小工具后面都会跟着一个尾巴(文本框)可以在文本框里输入判断代码
一些基本的判断代码如下
- is_home() ,仅显示在主页
- is_single() ,仅显示在文章页
- is_page() ,仅显示在页面
- is_category() ,仅显示在文章分类页
- is_tag() ,仅显示在文章标签页
- is_archive(),仅显示在 归档页
- is_404() ,仅显示在 404页
- is_search() ,仅显示在搜索结果页
并且也支持逻辑字符 和&& 或|| 非!
非插件:利用模板
当然,并不是所有人都喜欢用插件的方式实现这种功能,这里写一个利用模板template添加不同sidebar的方法(个人折腾的成果)
原理简述呢,就是自己写一个小工具sidebar-n.php,再写一个模板template-x.php,把小工具挂到模板里,ok~
这里以Twenty Eleven主题为例,我们首先要“注册”一个新的sidebar,打开function.php,搜索sidebar找到如下代码:
function twentyeleven_widgets_init() { register_widget( 'Twenty_Eleven_Ephemera_Widget' ); register_sidebar( array( 'name' => __( 'Main Sidebar', 'twentyeleven' ), 'id' => 'sidebar-1', 'before_widget' => '<aside id="%1$s" class="widget %2$s">', 'after_widget' => "</aside>", 'before_title' => '<h3 class="widget-title">', 'after_title' => '</h3>', ) ); }
这些代码是通用的,因为每一个function.php都有。我们把这段代码扩展一下:
function twentyeleven_widgets_init() { register_widget( 'Twenty_Eleven_Ephemera_Widget' ); register_sidebar( array( 'name' => __( 'Main Sidebar', 'twentyeleven' ), 'id' => 'sidebar-1', 'before_widget' => '<aside id="%1$s" class="widget %2$s">', 'after_widget' => "</aside>", 'before_title' => '<h3 class="widget-title">', 'after_title' => '</h3>', ) ); register_sidebar( array( 'name' => __( '我的小工具', 'twentyeleven' ), 'id' => 'sidebar-n', 'description' => __( '这里可以填一些描述性文字', 'twentyeleven' ), 'before_widget' => '<aside id="%1$s" class="widget %2$s">', 'before_widget' => '<aside id="%1$s" class="widget %2$s">', 'after_widget' => "</aside>", 'before_title' => '<h3 class="widget-title">', 'after_title' => '</h3>', ) ); }
新的sidebar-n就这样创建成功了,这里的n可以是任何数字,如果你现在打开后台小工具页面,就可以看到新的sidebar-n了。
但它目前只是“理论地”存在于后台,我们还要让它实际地显示在网站前台。
继续创建一个同名文件sidebar-n.php,直接复制并修改原主题sidebar.php里的代码就可以
<?php if ( is_active_sidebar( 'sidebar-n' ) ) : ?> <div id="secondary" class="widget-area" role="complementary"> /*div里都是一些css规则*/ <?php dynamic_sidebar( 'sidebar-n' ); ?> </div><!-- #secondary .widget-area --> <?php endif; ?>
然后我们要建立一个模板,调用sidebar-n。创建template-x.php,复制并修改原主题page.php里的代码就可以
<?php /** * Template Name: 模板名称 * Description: 模板描述 */ get_header(); ?> <div id="primary"> <div id="content" role="main"> /*css规则*/ <?php while ( have_posts() ) : the_post(); ?> /*这里是主循环*/ <?php get_template_part( 'content', 'page' ); ?> <?php comments_template( '', true ); ?> <?php endwhile; // end of the loop. ?> </div><!-- #content --> </div><!-- #primary --> <?php get_sidebar(x); ?> /*注意这里!*/ <?php get_footer(); ?>
注意尾部是 get_sidebar(x) 而不是 get_sidebar() 把参数传递进去就ok了。
以上,大功告成。新建一个页面,选择你建立的那个模板,之后你会发现相应的侧边栏就会出现在这个页面上。
其实,相比之下用模板改的方法实在是繁琐,并且还需要对主题文件进行修改,个人写这些纯粹是为了显摆一下个人折腾的成果,因为如果你更换了主题,它也就失效了。个人更推崇使用插件的方法,这样即便更换主题,小工具的判断依然有效。