WordPress在显示文章文章类型时会使用许多模板文件。任何与博客或其文章相关的内容都属于文章类型。

Index.php

如果不存在其他模板文件,index.php将会用于显示文章类型。正如多处所述,每个主题都必须拥有一个index.php文件才能被视为有效主题。许多基础主题只需使用index.php来显示文章类型即可,但根据上述使用场景,就有必要创建其他模板文件。

通常情况下,根据要显示的内容,您可能需要独特的结构或布局。有许多模板可供使用,以便根据网站内的上下文自定义内容结构。其中最常用的两种文章模板文件分别是home.php和single.php,前者用于显示文章列表,后者用于显示单篇文章。

Home.php

当使用静态首页且网站为博客列表定义了专用页面时,就会使用home.php文件来呈现该博客列表页面。相比创建自定义页面模板,建议使用此模板,因为自定义页面模板无法正确实现博客的分页功能。如果主题中没有home.php,则会使用index.php作为替代。

Single.php

在模板结构中应尽量保持简洁,除非确实有需要,否则无需创建更多模板。因此,大多数主题开发者并不会创建单独的single-post.php文件,因为single.php已经足够满足需求。实际上,所有主题都应该包含single.php文件。以下是Twenty Fifteen主题中的single.php文件示例。

<?php
/**
 * 用于显示所有单篇文章及其附件的模板
 *
 * @package WordPress
 * @subpackage Twenty_Fifteen
 * @since Twenty Fifteen 1.0
 */
 
get_header(); ?>
 
    <div id="primary" class="content-area">
        <main id="main" class="site-main" role="main">
 
        <?php
        // 开始循环。
        while ( have_posts() ) : the_post();
 
            /*
             * 包含针对该文章类型的特定内容模板。如果您想在子主题中使用此功能,
             * 可以包含一个名为content-___.php的文件(其中___代表文章类型),系统将使用该文件。
             */
            get_template_part( 'content', get_post_format() );
 
            // 如果评论是开启状态或存在至少一条评论,则加载评论模板。
            if ( comments_open() || get_comments_number() ) :
                comments_template();
            endif;
 
            // 上一篇/下一篇文章导航。
            the_post_navigation( array(
                'next_text' => '<span class="meta-nav" aria-hidden="true">' . __( '下一篇', 'twentyfifteen' ) . '</span> ' .
                    '<span class="screen-reader-text">' . __( '下一篇文章:', 'twentyfifteen' ) . '</span> ' .
                    '<span class="post-title">%title</span>',
                'prev_text' => '<span class="meta-nav" aria-hidden="true">' . __( '上一篇', 'twentyfifteen' ) . '</span> ' .
                    '<span class="screen-reader-text">' . __( '上一篇文章:', 'twentyfifteen' ) . '</span> ' .
                    '<span class="post-title">%title</span>',
            ) );
 
        // 结束循环。
        endwhile;
        ?>
 
        </main><!-- .site-main -->
    </div><!-- .content-area -->
 
<?php get_footer(); ?>

在上面的代码示例中,可以看到首先通过get_header()引入了页头,接着是两个HTML标签。随后the Loop开始运行,然后通过模板标签get_template_part( 'content', get_post_format());,利用get_post_format()确定文章类型,从而加载相应的内容。接着,通过模板标签comments_template()加载评论功能。之后是分页功能。最后,关闭内容容器,再通过get_footer()引入页脚。

Singular.php

WordPress 4.3版本新增了singular.php文件,其层级位于文章的single.php、页面的page.php及其对应变体之后。该模板遵循is_singular()函数的规则,可用于显示任何类型的单篇文章。那些在这两个文件中使用相同代码(或在一个文件中包含另一个文件)的主题,现在可以简化为仅使用一个模板。

Archive.php

除非开发者在其模板中为永久链接添加了元数据,否则不会使用archive.php文件。元数据是与文章相关联的信息,例如文章的发布日期、作者,以及用于标记文章的分类、标签或分类法,都属于元数据的范畴。当网站访问者点击某项元数据时,archive.php就会显示与该元数据相关的所有文章。例如,如果访问者点击了某位作者的姓名,archive.php就会显示该作者的所有文章。

通常情况下,archive.php显示的页面标题就是用户所点击的元数据名称。所以如果用户点击了作者的姓名,显示所有该作者文章的页面标题就会是该作者的姓名,而且通常还会附带关于该元数据的简要描述。以下是Twenty Fifteen主题中archive.php文件的一个代码示例。这段代码是使archive.php文件区别于home.php或index.php文件的唯一部分。

<header class="page-header">
    <?php
        the_archive_title( '<h1 class="page-title">', '</h1>' );
        the_archive_description( '<div class="taxonomy-description">', '</div>' );
    ?>
</header>
<!-- .page-header -->

Author.php和Date.php

Author.php和date.php是更为特定的归档类型文件。如果您需要复习相关知识,可以查看它们在模板层级结构中的位置。一般来说,对于大多数主题而言,archive.php就已经足够,无需创建这些额外的模板。

Author.php

如果您正在开发一个适用于多位作者的主题,那么创建一个author.php模板可能是明智之举。在author.php模板中,您可以提供关于作者的更多信息,如他们的头像、社交媒体链接,以及他们撰写的所有文章。这比仅仅依赖archive.php文件要更好。

此外,您还可以根据每位作者的作者ID或昵称,为他们创建专门的author.php文件。例如,假设John Doe是一个拥有众多客座作者的网站的首席作者,您可能希望在author.php中显示所有客座作者的信息,但同时也可以为John Doe创建一个包含更多信息的专用作者页面,比如创建author-johndoe.php或author-3.php(如果他的作者ID是3的话)。

Date.php

同样地,如果您正在为杂志或新闻类网站开发主题,那么创建date.php文件也是合理的,因为这类网站通常会按日期或期号来整理文章和帖子。此外,如果确有必要,您还可以创建day.php、month.php或year.php文件。

Category.php、Tag.php和Taxonomy.php

如果您需要复习一下分类、标签和分类法是什么,可以查看相关页面。通常情况下,您并不需要创建这些模板文件。不过,在为美食博主开发主题的示例中,确实存在需要创建这些特定模板的情况。在美食博主网站上,分类可能包括“优秀餐厅”、“美味美食”、“民族料理”和“食谱”等。

您可能希望大多数博客文章都以相同的方式显示,但那些被归类为食谱的文章除外,因为所有食谱都包含配料和步骤部分。因此,您或许需要创建一个category-recipe.php文件,以便以网格视图展示食谱类博客文章,并同时显示一些关于该食谱的重要细节。

另外,假设巧克力是您正在开发的主题中非常重要的一个标签,那么创建一个tag-chocolate.php文件可能是个好主意,这样您就可以展示一张专门的巧克力主题横幅图片。

Search.php

大多数主题都包含search.php文件,这样就能让用户清楚地知道他们的搜索请求已经得到处理。通常还会有一些用于标识搜索结果的页头内容,比如Twenty Fifteen主题中的这段代码。

<header class="page-header">
<h1 class="page-title">
    <?php printf( __( '搜索结果:%s', 'twentyfifteen' ), get_search_query() ); ?>
</h1>
</header><!-- .page-header -->

这段代码通过get_search_query()获取用户输入的搜索关键词。通常情况下,search.php只会显示文章摘录而非完整内容,因为用户此时只是想判断这篇文章或页面是否符合他们的搜索需求。