显示标签为“侧边栏”的博文。显示所有博文
显示标签为“侧边栏”的博文。显示所有博文

WordPress代码实现不同页面使用不同的侧边栏sidebar

WordPress群里有朋友问到如何使不同的页面调用不同的侧边栏,比如首页的侧边栏和分类页的侧边栏不一样,或者分类页的侧边栏和内容页的又不一样,这样的功能,我们可以使用Widget Logic 插件来实现。

[caption id="attachment_124" align="alignnone" width="267" caption="wegdit logic 设置"][/caption]

 

Widget Logic 插件的使用可以看我前面的文章:Widget logic让你的侧边栏与众不同

 

本文将介绍另外一种不使用插件的方法,用代码来实现。当然,这种方法是有前提的,前提就是你的侧边栏不是通过管理控制板后台里面的小工具来生成的,而是在模板文件sidebar.php中代码生成的。只有是代码生成的侧边栏,才能同样用代码来控制不同页面显示不同的侧边栏内容。

下面的代码是我的sidebar.php模板文件里面的部分代码:

[php]</pre><ul><li><h2>标签云图</h2><div> </div></li><li><h2>最新文章</h2><br /><%%KEEPWHITESPACE%%> <!--?php query_posts('showposts=7&cat=-111'); ?--> <br /><br /><br /></li></ul><pre>
<br />[/php]



假如我们只想让标签云图在首页显示,不在分类栏目下面显示出来,那么我们可以在标签云图的代码前面加上条件控制代码,is_home(),最后的代码如下:

[php]<br /><!--?php if(is_home()): ?--></pre><ul><li><h2>标签云图</h2><div> </div></li></ul><pre>
<br /><!--?php endif; ?--></pre><ul><li><h2>最新文章</h2><br /><%%KEEPWHITESPACE%%> <!--?php query_posts('showposts=7&cat=-111'); ?--> <br /><br /><br /></li></ul><pre>
<br />[/php]



和Widget Logic 插件相比,通过代码来控制侧边栏内容的显示更加强大,更加灵活,适用于Widget Logic 插件的控制条件is_home()、is_single()、is_category()等条件同样适用于代码,而且代码能控制的通过插件不一定能实现。

比如首页的侧边栏里面的最新文章调用所有分类的最新文章,而某个分类页面的侧边栏里面的最新文章显示该分类里面的最新文章。这种情况,我们可以通过加入下面的代码来实现:

[php]<!--?php if (in_category('111')) : ?-->[/php]


上面代码中的111就是你指定的分类的ID.

总结一下:其实两种方法都能实现不同页面显示不同的侧边栏内容,插件的方法比较简单,适用于不会代码的童鞋;代码来控制的方法要求你对WordPress的基本代码流程比较熟悉,有一定的编程基础才行。

WordPress实现多个侧边栏widgets小工具

有时候我们在显示侧边栏内容的时候,希望首页、分类列表页以及内容页面的侧边栏各不相同,比如说首页的侧边栏我们希望显示文章分类目录树,分类页的侧边栏显示日历,内容页的侧边栏显示热门文章,如何实现呢?
要实现这种功能,有三种方法,一是用插件,二是完全手写代码,三是少量代码加上WordPress自身的小工具功能。前面两种方法我以前都介绍过,可以从下面进入查看。

用插件:Widget logic让你的侧边栏与众不同
用代码:WordPress代码实现不同页面使用不同的侧边栏sidebar

现在我来说说第三种方法,用少量代码加上WordPress自身的小工具功能实现不同页面不同侧边栏。这种方法需要你的主题支持多组小工具分组,比如我这个主题支持三组,看下图中右侧部分:



如果你的主题不支持三组widget,可以通过在主题文件夹下面的functions.php文件中添加如下代码来支持:
if ( function_exists('register_sidebar') ) {
register_sidebar( array(
'name' => __( 'Sidebar Home', 'zuluo' ),
'id' => 'sidebar-home',
'description' => __( 'The sidebaer in home', 'zuluo' ),
'before_widget' => '<li>',
'after_widget' => '</li>',
'before_title' => '<h2>',
'after_title' => '</h2>',
) );
register_sidebar( array(
'name' => __( 'Sidebar Category', 'zuluo' ),
'id' => 'sidebar-category',
'description' => __( 'The sidebaer in category', 'zuluo' ),
'before_widget' => '<li>',
'after_widget' => '</li>',
'before_title' => '<h2>',
'after_title' => '</h2>',
) );
register_sidebar( array(
'name' => __( 'Sidebar Single', 'zuluo' ),
'id' => 'sidebar-single',
'description' => __( 'The sidebaer in single', 'zuluo' ),
'before_widget' => '<li>',
'after_widget' => '</li>',
'before_title' => '<h2>',
'after_title' => '</h2>',
) );
}

把上面代码添加到functions.php文件中,保存之后到后台控制板刷新小工具页面,然后就可以看到右侧多了三个小工具组了。当然,如果你的主题已经有一个工具组了,可以只粘贴上面代码的第二或者第三部分,注意array数组中的“id”参数,三个工具组不能同名。如果想支持四组,复制一块代码,把id更改一下就可以了。

主题支持三个工具组之后,就可以在sidebar.php文件中加入部分判断代码,实现不同类型的页面显示不同的侧边栏了。下面是sidebar.php 文件中部分代码:
<?php
if (function_exists('dynamic_sidebar')){
if(is_home()){
if(!dynamic_sidebar('sidebar-home')) {
mysidebar();
}
}
elseif(is_category()||is_archive()){
if(!dynamic_sidebar('sidebar-category')) {
mysidebar();
}
}
elseif(is_single()||is_page()){
if(!dynamic_sidebar('sidebar-single')) {
mysidebar();
}
}
else {
if(!dynamic_sidebar('sidebar-home')) {
mysidebar();
}
}
}
else {
mysidebar();
}
?>

注意:上面代码中的mysidebar()函数是当主题不支持侧边栏调用功能的时候显示的内容。
简单解释一下上面的代码吧,代码的意思从上至下,如果支持侧边栏调用功能,则执行下面半段:如果是首页,调用sidebar-home工具组;如果是分类目录页就调用sidebar-category工具组 ;如果是内容页和单个页面,则调用sidebar-single工具组;其他类型页面默认调用sidebar-home工具组。

如果各个工具组调用不成功,测执行 mysidebar()函数 ,mysidebar()函数可以像下面这样简单定义一下:
<?php
function mysidebar() {
?>
<li><h2>最新文章</h2>
<?php query_posts( array( 'post__not_in' => get_option( 'sticky_posts' ), 'cat' =>$options['sidebar_hide'], 'showposts' =>'6' ) ); ?>
<ul>
<?php while (have_posts()) : the_post(); ?>
<li>
<a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>" target="_blank">
<img src="<?php echo get_the_thumb($post->ID); ?>">
<p><?php the_title(); ?></p></a>
</li>
<?php
endwhile;
// Reset Query
wp_reset_query();
?>
</ul>
</li>
<?php } ?>

保存sidebar.php文件,最后记得在wordpress后台往三组工具组中拖动几个小工具进去,然后在前台刷新页面就可以看到效果了。

WordPress代码实现不同页面使用不同的侧边栏sidebar

WordPress群里有朋友问到如何使不同的页面调用不同的侧边栏,比如首页的侧边栏和分类页的侧边栏不一样,或者分类页的侧边栏和内容页的又不一样,这样的功能,我们可以使用Widget Logic 插件来实现。

[caption id="attachment_124" align="alignnone" width="267" caption="wegdit logic 设置"][/caption]

 

Widget Logic 插件的使用可以看我前面的文章:Widget logic让你的侧边栏与众不同

 

本文将介绍另外一种不使用插件的方法,用代码来实现。当然,这种方法是有前提的,前提就是你的侧边栏不是通过管理控制板后台里面的小工具来生成的,而是在模板文件sidebar.php中代码生成的。只有是代码生成的侧边栏,才能同样用代码来控制不同页面显示不同的侧边栏内容。

下面的代码是我的sidebar.php模板文件里面的部分代码:

[php]</pre><ul><li><h2>标签云图</h2><div> </div></li><li><h2>最新文章</h2><br /><%%KEEPWHITESPACE%%> <!--?php query_posts('showposts=7&cat=-111'); ?--> <br /><br /><br /></li></ul><pre>
<br />[/php]



假如我们只想让标签云图在首页显示,不在分类栏目下面显示出来,那么我们可以在标签云图的代码前面加上条件控制代码,is_home(),最后的代码如下:

[php]<br /><!--?php if(is_home()): ?--></pre><ul><li><h2>标签云图</h2><div> </div></li></ul><pre>
<br /><!--?php endif; ?--></pre><ul><li><h2>最新文章</h2><br /><%%KEEPWHITESPACE%%> <!--?php query_posts('showposts=7&cat=-111'); ?--> <br /><br /><br /></li></ul><pre>
<br />[/php]



和Widget Logic 插件相比,通过代码来控制侧边栏内容的显示更加强大,更加灵活,适用于Widget Logic 插件的控制条件is_home()、is_single()、is_category()等条件同样适用于代码,而且代码能控制的通过插件不一定能实现。

比如首页的侧边栏里面的最新文章调用所有分类的最新文章,而某个分类页面的侧边栏里面的最新文章显示该分类里面的最新文章。这种情况,我们可以通过加入下面的代码来实现:

[php]<!--?php if (in_category('111')) : ?-->[/php]


上面代码中的111就是你指定的分类的ID.

总结一下:其实两种方法都能实现不同页面显示不同的侧边栏内容,插件的方法比较简单,适用于不会代码的童鞋;代码来控制的方法要求你对WordPress的基本代码流程比较熟悉,有一定的编程基础才行。

WordPress实现多个侧边栏widgets小工具

有时候我们在显示侧边栏内容的时候,希望首页、分类列表页以及内容页面的侧边栏各不相同,比如说首页的侧边栏我们希望显示文章分类目录树,分类页的侧边栏显示日历,内容页的侧边栏显示热门文章,如何实现呢?
要实现这种功能,有三种方法,一是用插件,二是完全手写代码,三是少量代码加上WordPress自身的小工具功能。前面两种方法我以前都介绍过,可以从下面进入查看。

用插件:Widget logic让你的侧边栏与众不同
用代码:WordPress代码实现不同页面使用不同的侧边栏sidebar

现在我来说说第三种方法,用少量代码加上WordPress自身的小工具功能实现不同页面不同侧边栏。这种方法需要你的主题支持多组小工具分组,比如我这个主题支持三组,看下图中右侧部分:



如果你的主题不支持三组widget,可以通过在主题文件夹下面的functions.php文件中添加如下代码来支持:
if ( function_exists('register_sidebar') ) {
register_sidebar( array(
'name' => __( 'Sidebar Home', 'zuluo' ),
'id' => 'sidebar-home',
'description' => __( 'The sidebaer in home', 'zuluo' ),
'before_widget' => '<li>',
'after_widget' => '</li>',
'before_title' => '<h2>',
'after_title' => '</h2>',
) );
register_sidebar( array(
'name' => __( 'Sidebar Category', 'zuluo' ),
'id' => 'sidebar-category',
'description' => __( 'The sidebaer in category', 'zuluo' ),
'before_widget' => '<li>',
'after_widget' => '</li>',
'before_title' => '<h2>',
'after_title' => '</h2>',
) );
register_sidebar( array(
'name' => __( 'Sidebar Single', 'zuluo' ),
'id' => 'sidebar-single',
'description' => __( 'The sidebaer in single', 'zuluo' ),
'before_widget' => '<li>',
'after_widget' => '</li>',
'before_title' => '<h2>',
'after_title' => '</h2>',
) );
}

把上面代码添加到functions.php文件中,保存之后到后台控制板刷新小工具页面,然后就可以看到右侧多了三个小工具组了。当然,如果你的主题已经有一个工具组了,可以只粘贴上面代码的第二或者第三部分,注意array数组中的“id”参数,三个工具组不能同名。如果想支持四组,复制一块代码,把id更改一下就可以了。

主题支持三个工具组之后,就可以在sidebar.php文件中加入部分判断代码,实现不同类型的页面显示不同的侧边栏了。下面是sidebar.php 文件中部分代码:
<?php
if (function_exists('dynamic_sidebar')){
if(is_home()){
if(!dynamic_sidebar('sidebar-home')) {
mysidebar();
}
}
elseif(is_category()||is_archive()){
if(!dynamic_sidebar('sidebar-category')) {
mysidebar();
}
}
elseif(is_single()||is_page()){
if(!dynamic_sidebar('sidebar-single')) {
mysidebar();
}
}
else {
if(!dynamic_sidebar('sidebar-home')) {
mysidebar();
}
}
}
else {
mysidebar();
}
?>

注意:上面代码中的mysidebar()函数是当主题不支持侧边栏调用功能的时候显示的内容。
简单解释一下上面的代码吧,代码的意思从上至下,如果支持侧边栏调用功能,则执行下面半段:如果是首页,调用sidebar-home工具组;如果是分类目录页就调用sidebar-category工具组 ;如果是内容页和单个页面,则调用sidebar-single工具组;其他类型页面默认调用sidebar-home工具组。

如果各个工具组调用不成功,测执行 mysidebar()函数 ,mysidebar()函数可以像下面这样简单定义一下:
<?php
function mysidebar() {
?>
<li><h2>最新文章</h2>
<?php query_posts( array( 'post__not_in' => get_option( 'sticky_posts' ), 'cat' =>$options['sidebar_hide'], 'showposts' =>'6' ) ); ?>
<ul>
<?php while (have_posts()) : the_post(); ?>
<li>
<a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>" target="_blank">
<img src="<?php echo get_the_thumb($post->ID); ?>">
<p><?php the_title(); ?></p></a>
</li>
<?php
endwhile;
// Reset Query
wp_reset_query();
?>
</ul>
</li>
<?php } ?>

保存sidebar.php文件,最后记得在wordpress后台往三组工具组中拖动几个小工具进去,然后在前台刷新页面就可以看到效果了。