wordpress判断首页is_home()为什么会失效,判断不出首页,或者判断到分类页了,解决方法!

老白 2个月前 55浏览 0评论

第一次写wordpress主题,就遇到is_home()判断失败!


第一种情况:

<div class="sidebar">
<?php 
		if (is_home()){
			if (function_exists('dynamic_sidebar') && dynamic_sidebar('widget_sidebar_home')) : else :
				echo '<div class="widget"><div class="textwidget"><h3>注意</h3><span style="color: #f00;">请前往“后台 - 外观 - 小工具”设置 首页右侧栏 内容。</span></div></div>';
			endif;
		}elseif (is_category()){
			if (function_exists('dynamic_sidebar') && dynamic_sidebar('widget_sidebar_cate')) : else :
				echo '<div class="widget"><div class="textwidget"><h3>注意</h3><span style="color: #f00;">请前往“后台 - 外观 - 小工具”设置 分类右侧栏 内容。</span></div></div>';
			endif;
		}elseif (is_single()||is_page()){
			if (function_exists('dynamic_sidebar') && dynamic_sidebar('widget_sidebar_single')) : else :
				echo '<div class="widget"><div class="textwidget"><h3>注意</h3><span style="color: #f00;">请前往“后台 - 外观 - 小工具”设置 文章、页面右侧栏 内容。</span></div></div>';
			endif;
		} else {
			if (function_exists('dynamic_sidebar') && dynamic_sidebar('widget_sidebar_cate')) : else :
				echo '<div class="widget"><div class="textwidget"><h3>注意</h3><span style="color: #f00;">请前往“后台 - 外观 - 小工具”设置 分类右侧栏 内容。</span></div></div>';
			endif; 
		}
?>
</div>

上方代码判断侧栏是没有问题的吧?但是测试根本无法判断!

原因:

如果is_home()之前有个 query_posts(),则会让它本身判断失效。原因是 is_home() 函数在首页的时候会返回一个 true 来判断,而 query_posts()会阻断这一判断。

解决方案是在 is_home()之前加一个 wp_reset_query()。

解决方法:

if (is_home())

之前加入:

wp_reset_query();

整体修改就是:

<div class="sidebar">
<?php 
		wp_reset_query();	// 新增
		if (is_home()){
			if (function_exists('dynamic_sidebar') && dynamic_sidebar('widget_sidebar_home')) : else :
				echo '<div class="widget"><div class="textwidget"><h3>注意</h3><span style="color: #f00;">请前往“后台 - 外观 - 小工具”设置 首页右侧栏 内容。</span></div></div>';
			endif;
		}elseif (is_category()){
			if (function_exists('dynamic_sidebar') && dynamic_sidebar('widget_sidebar_cate')) : else :
				echo '<div class="widget"><div class="textwidget"><h3>注意</h3><span style="color: #f00;">请前往“后台 - 外观 - 小工具”设置 分类右侧栏 内容。</span></div></div>';
			endif;
		}elseif (is_single()||is_page()){
			if (function_exists('dynamic_sidebar') && dynamic_sidebar('widget_sidebar_single')) : else :
				echo '<div class="widget"><div class="textwidget"><h3>注意</h3><span style="color: #f00;">请前往“后台 - 外观 - 小工具”设置 文章、页面右侧栏 内容。</span></div></div>';
			endif;
		} else {
			if (function_exists('dynamic_sidebar') && dynamic_sidebar('widget_sidebar_cate')) : else :
				echo '<div class="widget"><div class="textwidget"><h3>注意</h3><span style="color: #f00;">请前往“后台 - 外观 - 小工具”设置 分类右侧栏 内容。</span></div></div>';
			endif; 
		}
?>
</div>

解决了!


第二种情况:

当你的首页不是默认的index.php的时候,而是在后台指定了一个page页面。这种情况下is_home()会失效,也就是说这样子的情况下就不能再用is_home()来判断。

is_front_page()是判断当前页是不是指定的首页,我们在上面描述的情况下需要的就是这个函数。

<?php if (is_home() || is_front_page()) { ?>
我只会在首页显示
<?php } ?>

ps:我在使用多站点wordpress进行二次开发时,需要所有的站点均指定一个page作为首页来显示;而且,该page作为首页显示时,页头还要显示一个banner图片。这就需要对所有theme主题的page.php文件内使用上述代码以判断是否首页。


发表评论