第一次寫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文件內使用上述代碼以判斷是否首頁。