问题描述

我真的很困惑与 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(#替换为 @) 。