問題描述
通過 WordPress documentation,它表示 is_page_template()與”template name”(如果提供) 進行比較。
我有一個模板存儲在 page-homepage.php 中叫做 Homepage:
/*
* Template Name: Homepage
* Description: The template for displaying the homepage
*/
當我使用該模板時,我有一些我想在我的 functions.php 中運行的代碼:
if (is_page_template('Homepage')) {
...
但是當我在使用該模板的頁面上時不會被觸發。
當我看看 Wordpress 為 is_page_template()執行的代碼時,它實際上是檢查文檔名稱,而不是模板名稱…?
function is_page_template( $template = '' ) {
$page_template = get_page_template_slug( get_queried_object_id() );
if ( $template == $page_template )
return true;
在我的實例中,$page_template 似乎是 page-homepage.php – 不是模板名稱,就像文檔建議一樣嗎?
我做錯了嗎?
最佳解決方案
你的條件應該是這樣寫的:
if (is_page_template('path/file.php')) {
// Do stuff
}
我相信混亂是兩件事的結果:
-
文件涉及到”name” 。指定”file name” 將使文檔更加清晰。
-
is_page_template()背後的代碼顯示了get_page_template_slug()功能的核心。這個功能實際上返回一個文件名,而不是模板塊。 https://codex.wordpress.org/Function_Reference/get_page_template_slug
當指定 is_page_template()函數的參數時 (如上例所示),文件路徑是相對於主題根。
該函數在循環內不起作用。
次佳解決方案
我認為最好的事情是,它檢查 FILE 名稱,在你的情況下,它將是 page-homepage.php 。所以:
if (is_page_template('page-homepage.php')) {
...
其他需要考慮的事情是,如果模板文件實際上存儲在主題內的另一個文件夾中。 read more
還有一件事,Template Name: Homepage 在創建頁面或帖子時用於標識模板。
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。