WordPress 中 is_home() 與 is_front_page() 的差異
當我們在開發自己的 theme 時,常需要針對判斷當前頁面是否為首頁,這件事情來做相對應的判斷,舉個例子
<body class ="<?php is_home() ? print 'front' : print 'not-front'; ?>">
//balabala
</body>
判斷當前是否為首頁並在 body
的元素上給上想要的 class 方便我們寫 CSS 樣式,可是設定為首頁卻得到 not-front
實在讓人疑問,難道是 BUG 嗎
在這裡使用 PHP
if()
條件式的簡寫 可以參考PHP: if
翻了一下 WordPress 官方的文件有 is_home()
以及 is_front_page()
這兩個 function 的確會在不同的 template 回傳的值會有不同,到底差異在哪裡?就讓我們來看看吧。
兩者差異
其實這兩個 function 在 return true
或是 false
共同判斷的條件要看一下 get_option( 'show_on_front' )
這個 function return 給我們是 posts
還是 page
這樣講可能會有點饒口不如讓我們看看 code 會比較好理解
if (get_option('show_on_front')=='posts') {
is_front_page() // return true
is_home() // return true
}
可以看到以上 code 得知**首頁為 posts
**兩者都會 return true
if (get_option('show_on_front')=='page') {
is_front_page() // return true
is_home() // return false
}
這裡我們就可以看出差異性了,當我們設定首頁為 page
is_front_page()
就會return true
is_home()
就會return false
可是當我們將 blog
顯示為首頁時結果卻是相反的
is_front_page()
就會return false
is_home()
就會return true
由上面這幾個案例可以知道在不同條件之下可以得到 true
or false
來針對 template 進行客製化的修改