让主页看起来不同于没有静态页面的index.php

时间:2016-07-14 作者:Arcath

我有一个主题,我想让主页看起来与其他帖子列表不同。我用过home.php 创建主页,并假设在单击较旧的帖子时/page/2 将使用index.php 但这似乎是错误的。

是否有一组主题文件可以做到这一点?或者我需要为我的主页使用包含以下内容的静态页面home.php.

我对法典的解释是:

  • example.com/ -> home.php
  • example.com/page/2 -> index.php
  • example.com/category/foo/ -> archive.php

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

我想你误解了WordPress上下文中的主页(索引页)是什么。主页是站点的主页,默认情况下如下example.com, AND 从此主页派生的任何分页页面。所以example.com/page/2 也被视为主页。简而言之,任何页面is_home() 返回true将成为主页。

默认情况下,index.php 将用于主页。home.php 如果设置了静态首页,则将用于blogpage(如果可用)。

如果您需要主页的第一页在样式方面与主页的其他页面有很大不同,我的最佳选择是在正常层次结构之外创建一个自定义模板,然后使用home_template 筛选以在查看主页的第一页时包含此模板。

示例:

让我们创建自定义模板并调用它index-home.php. 这种命名约定是唯一的,在正常的层次结构中不存在,所以我们保存在这里。现在,我们只需要包括它

add_filter( \'home_template\', function ( $template )
{
    // Only target page one    
    if ( is_paged() )
        return $template;

    // We are on page one of the homepage, lets locate and include our template
    $locate_template = locate_template( \'index-home.php\' );

    if ( !$locate_template )
        return $template;

    return $locate_template;
});
您也可以只修改index.php 并在is_paged() 条件唯一的缺点可能是index.php 是对所有页面的回退,因此index.php 无法维持的混乱

示例:

if (    !is_paged()
     && is_home()
) {
    // Add code etc for page one homepage
} else {
    // Add code etc for all oher pages
}
最后,主查询仍将正常执行。如果您需要更改此项,则必须使用pre_get_posts 更改主查询的行为

相关推荐