問題描述

我真的很困惑與 index.phphome.phpfront-page.php 。在很多情況下,即使我有一個 index.php,我用 front-page.php 覆蓋。但是最近,我意識到 home.php

  • home.phpindex.php 有什麼區別?

  • home.phpindex.php 使用的理想條件是什麼?

  • 使用 front-page.php 的理想條件是什麼?

  • 當我使用 front-page.php 時,index.php 正在為我做什麼具體任務?

我在食品法典中閱讀了 Template Hierarchy 。請不要將我的問題與頁面模板混合起來,我明白了,alHamduLILLAH 。

最佳解決方案

前臺邏輯是 WordPress 中最令人困惑的功能之一,非常難以解釋和總結。正如在評論中提到的那樣,我燒了不正之間的時間把我的 front page logic cheat sheet 放在一起。

但是,由於這是一個受歡迎的線索,我可以嘗試回答這些具體問題。

What’s the difference between the home.php and index.php?

home.php 是帖子索引的模板 (本機帖子型別的歸檔,這是 WP 中的一個特殊情況) 。 WP 將嘗試查詢帖子的索引,無論它們是顯示在網站的根目錄還是在專用帖子頁面。

index.php 是全面的模板。它是模板層次結構的所有分支的最終選擇,當沒有其他適合的檔案和單一檢視時,它將被挑選。

只有帖子索引可以使用 home.php,但所有其他上下文可能會使用 index.php

What’s the ideal condition to use a home.php than an index.php

您可以使用 home.php 自定義帖子索引。

您可以使用 index.php 在主題中提供最通用的模板,適合顯示任何內容。

某些主題選擇擁有空的 index.php,並確保它們具有更多特定的模板,適用於所有可能的情況,因此它不會被使用。

What’s the ideal condition to use a front-page.php?

front-page.php 用於根或靜態首頁上的帖子索引 (如果啟用) 。

它是一個高優先順序的模板,所以如果主題有它,你不能為靜態首頁選擇任意模板。由於這個原因,幾乎從未包含在公開發行的主題中 (這是正確的) 。

最好的用途是在私人專案中,因為它比頁面模板更容易配置。

When I’m using a front-page.php then what specific task an index.php is doing for me then?

index.php 仍然是所有其他情況下的所有模板。

如果您使用靜態首頁 (front-page.php 將應用於此),則您的帖子頁將嘗試使用 home.php,然後使用 index.php

次佳解決方案

front-page.php 檔案是網站首頁模板。無論 get_option( 'show_on_front' )是否設定為 pageposts,都將始終在您的網站首頁使用。

home.php 模板檔案是部落格帖子索引模板。它將始終用於顯示您的部落格帖子索引,無論部落格帖子索引是顯示在網站首頁還是在其他頁面上。

在存在 front-page.phphome.hpp 的情況下,將 get_option( 'show_on_front' )設定為 posts(即站點首頁顯示部落格帖子索引) 時,front-page.php 檔案將優先於 home.php 檔案。

index.php 檔案是 Template Hierarchy 中所有上下文的預設後備模板。僅噹噹前上下文中不存在 more-specific 模板檔案時才使用它。

站點首頁的模板層次結構如下:

  • front-page.php

  • 如果'page' == get_option( 'show_on_front' ):頁面層次結構

  • 如果'posts' == get_option( 'show_on_front' ):部落格帖子索引層次結構

部落格帖子索引的模板層次結構是:

  • home.php

  • index.php

頁面的模板層次是:

  • 自定義頁面模板

  • page-{slug}.php

  • page-{id}.php

  • page.php

  • index.php

第三種解決方案

所有這一切都來自於對 Template Hierarchy 的全面閱讀。

home.php 用於:

  • 您的網站的首頁設定為顯示帖子列表,或

    • A static front page is set,和

    • 訪問者訪問您定義為您的 「帖子列表」 的頁面 (例如,http://example.com/blog/)

  • 主題還有一個 home.php 檔案

如果不符合最後一個條件 – 即主題中沒有 home.php 檔案,那麼 index.php 將被載入。

將使用 front-page.php

  • A static front page is set,和

  • 訪問者訪問您定義為 「靜態主頁」 的頁面 (即 http://example.com/),以及

  • 主題有一個 front-page.php 檔案

如果不符合最後一個條件 – 即主題中沒有 front-page.php 檔案,那麼 index.php 將被載入。

綜上所述

如果要自定義帖子列表,請使用 home.php 。如果要自定義靜態主頁,請使用 front-page.php

第四種方案

簡而言之:

  • index.php 只是一個後備模板,如果沒有找到適當的模板

  • home.php 用於部落格 (最近的帖子列表)

  • front-page.php 用於 landing-page

通用 index.php 模板

index.php 模板檔案是一個後備模板。當沒有其他更合適的模板可用時,它被用作最後的手段。例如,如果您沒有 front-page.phphome.php,則將使用 index.php 。缺少 archive.phpsingle.php 也是如此。

關於 front-page.php VS home.php

現在,front-page.php 和 home.php 模板之間的區別是使用 front-page.php 作為網站的主要 front-page,而 home.php 則是 Blog 部分的主頁。

我的網站的 landing-page 將使用什麼模板?

front-page.php 模板 (如果存在) 將用於該網站的主要主頁 (例如 http://www.example.com/) 。如果不存在,則使用 home.php 。如果 front-page.phphome.php 模板檔案都丟失,則將使用 index.php 後備模板。

什麼模板將用於我的部落格頁面?

WordPress 允許您在與 landing-page(例如 http://www.example.com/blog/) 不同的頁面上有一個”Blog” 頁面 (將列出最近的帖子) 。所以如果你的網站是這種情況,那麼 Blog 頁面將始終使用 home.php 模板。如果 home.php 不存在,則將使用 index.php 後備模板。

如何配置 landing-page 和部落格頁面?

要配置在首頁上顯示哪些內容,請轉到 WordPress 管理員,在 「工具」>「閱讀,您可以配置 「首頁顯示」 來顯示一個靜態頁面,或者您最新的帖子。

在這種情況下你選擇的頭版上顯示一個靜態頁面,那麼你還可以選擇設定為部落格頁面 (這將使用 home.php 模板) 的佔位符使用哪個頁面的可能性:

參考文獻

注:本文內容整合自 google/baidu/bing 翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:gxnotes#qq.com(#替換為 @) 。