WordPress 中 is_home() 與 is_front_page() 的差異

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 進行客製化的修改

參考資料

is_home()