問題描述

透過 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
}

我相信混亂是兩件事的結果:

  1. 檔案涉及到”name” 。指定”file name” 將使檔案更加清晰。

  2. 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。