本文档基于Typecho默认模板代码和官方文档整理,涵盖了所有可用的PHP模板API。

整理时间:2026年2月

模板路径:/home/nmb/code/博客UI增强/md/default/


📋 目录结构

default/
├── 404.php              # 404错误页面
├── comments.php         # 评论模块
├── footer.php           # 页脚模块
├── functions.php        # 主题配置与自定义函数
├── header.php           # 页头模块
├── index.php            # 首页/文章列表
├── page.php             # 独立页面
├── post.php             # 文章详情页
├── sidebar.php          # 侧边栏
├── style.css            # 主题样式
├── grid.css             # 网格布局样式
├── normalize.css        # CSS重置样式
├── screenshot.png       # 主题缩略图
└── img/                 # 图片资源目录

📊 API统计概览

类别 数量 说明
核心对象 $this API 约35个 模板核心方法
选项对象 $this->options API 约18个 站点设置方法
用户对象 $this->user API 3个 用户相关方法
评论对象 API 约15个 评论相关方法
Widget类 API 8个 内容组件类
全局函数 API 6个 辅助函数
表单元素 API 3种 主题配置元素

文件结构说明

文件名 作用 必须性
style.css 主题样式文件
screenshot.png 主题缩略图
index.php 首页以及说明文件
404.php 404页面文件
archive.php 通用(分类、搜索、标签、作者)页面文件
category.php 分类页面文件
search.php 搜索页面文件
tag.php 标签页面文件
author.php 作者页面文件
comments.php 评论页面文件
footer.php 底部页面文件
functions.php 主题函数文件
header.php 头部页面文件
page.php 独立页面文件
post.php 日志页面文件
sidebar.php 侧边栏页面文件

注:如果archive.php不存在,index.php也会作为通用页面,实现archive.php的工作。


一、核心对象 $this API

1.1 模板加载API

方法 参数 返回值 说明 使用示例
need() \(file` | void | 引入模板文件 | `\)this->need('header.php')
$this->need('footer.php')

1.2 页面类型判断API

方法 参数 返回值 说明 使用示例
is() \(type, \)param bool 判断当前页面类型 \(this->is('index')`<br>`\)this->is('post')
\(this->is('page')`<br>`\)this->is('category')
\(this->is('category', 'default')`<br>`\)this->is('tag')
\(this->is('author')`<br>`\)this->is('archive')
\(this->is('single')`<br>`\)this->is('search')

页面类型判断示例:

<?php if ($this->is('post')): ?>
    <!-- 文章单页内容 -->
<?php elseif ($this->is('page')): ?>
    <!-- 独立页面内容 -->
<?php elseif ($this->is('category', 'default')): ?>
    <!-- 默认分类内容 -->
<?php endif; ?>

1.3 文章循环API

方法 参数 返回值 说明 使用示例
have() bool 是否有文章 $this->have()
next() void 移动到下一篇文章 $this->next()

文章循环示例:

<?php if ($this->have()): ?>
    <?php while ($this->next()): ?>
        <!-- 文章内容 -->
        <h2><?php $this->title() ?></h2>
        <div><?php $this->content() ?></div>
    <?php endwhile; ?>
<?php else: ?>
    <h2>没有找到内容</h2>
<?php endif; ?>

1.4 文章内容API

方法 参数 返回值 说明 使用示例
content() \(more` | void | 输出文章内容 | `\)this->content(_t('阅读剩余部分'))
$this->content('Continue Reading...')
title() void 输出文章标题 \(this->title()`<br>`\)archive->title()
permalink() void 输出文章链接 \(this->permalink()`<br>`\)archive->permalink()
date() \(format` | void | 输出日期 | `\)this->date('F j, Y')
\(this->date('c')`<br>`\)archive->date()

日期格式参考:

  • Y - 4位年份 (如 2026)
  • m - 月份 (01-12)
  • d - 日期 (01-31)
  • H:i - 时间 (24小时制)
  • F j, Y - 英文日期格式 (如 February 3, 2026)

1.5 标签API

方法 参数 返回值 说明 使用示例
tags() \(split, \)link, \(default` | void | 输出标签 | `\)this->tags(', ', true, 'none')

参数说明:

  • $split: 标签分隔符
  • $link: 是否显示为链接
  • $default: 没有标签时显示的内容

1.6 分类API

方法 参数 返回值 说明 使用示例
category() \(split` | void | 输出分类 | `\)this->category(',')
$archive->category(',')

1.7 作者API

方法 参数 返回值 说明 使用示例
author() Object 获取作者对象 \(this->author()`<br>`\)archive->author()

作者对象方法:

$archive->author();              // 输出作者名
$archive->author->permalink();   // 输出作者链接

1.8 评论API

方法 参数 返回值 说明 使用示例
comments() \(type` | Object | 获取评论对象 | `\)this->comments()->to(\(comments)`<br>`\)this->comments('comment')->to(\(comments)`<br>`\)this->comments('trackback')->to(\(trackbacks)`<br>`\)this->comments('pingback')->to($pingbacks)
commentsNum() \(none, \)one, \(more` | void | 输出评论数 | `\)this->commentsNum(_t('暂无评论'), _t('1 条评论'), _t('%d 条评论'))
allow() \(capability` | bool | 判断权限 | `\)this->allow('comment')
commentUrl() void 输出评论提交URL $this->commentUrl()
respondId() void 输出评论回复区ID $this->respondId()
remember() \(field` | void | 输出记住的字段 | `\)this->remember('author')
\(this->remember('mail')`<br>`\)this->remember('url')
$this->remember('text')

评论类型过滤:

// 显示全部(默认)
\(this->comments()->to(\)comments);

// 只显示评论
\(this->comments('comment')->to(\)comments);

// 只显示引用通告
\(this->comments('trackback')->to(\)trackbacks);

// 只显示引用通知
\(this->comments('pingback')->to(\)pingbacks);

1.9 分页API

方法 参数 返回值 说明 使用示例
pageNav() \(prev, \)next, \(splitPage, \)prevWord, \(nextWord` | void | 输出分页导航 | `\)this->pageNav()
$this->pageNav('&laquo; 前一页', '后一页 &raquo;')

1.10 上下文导航API

方法 参数 返回值 说明 使用示例
thePrev() \(format, \)default void 输出上一篇链接 $this->thePrev('%s', _t('没有了'))
theNext() \(format, \)default void 输出下一篇链接 $this->theNext('%s', _t('没有了'))

1.11 归档标题API

方法 参数 返回值 说明 使用示例
archiveTitle() \(format, \)before, \(end` | void | 输出归档标题 | `\)this->archiveTitle(['category' => _t('分类 %s 下的文章'), 'search' => _t('包含关键字 %s 的文章'), 'tag' => _t('标签 %s 下的文章'), 'author' => _t('%s 发布的文章')], '', ' - ')

参数说明:

  • $format: 多级菜单间的分隔符,如 &raquo;-
  • $before: title 前显示的字符
  • $end: title 后显示的字符

自定义title示例:

// 默认:站点名称 » 页面标题
<?php \(this->options->title(); ?><?php \)this->archiveTitle(); ?>

// 自定义:页面标题 - 站点名称
<?php \(this->archiveTitle('', '', ' - '); ?><?php \)this->options->title(); ?>

1.12 头部/底部输出API

方法 参数 返回值 说明 使用示例
header() \(keywords` | void | 输出HTML头部信息 | `\)this->header()
$this->header('keywords=&generator=&template=&pingback=&xmlrpc=&wlw=')
footer() void 输出底部脚本 $this->footer()

头部信息过滤参数:

  • keywords: 关键词
  • description: 描述、摘要
  • rss1: feed rss1.0
  • rss2: feed rss2.0
  • atom: feed atom
  • generator: 程序版本等
  • template: 模板名称
  • pingback: 文章引用
  • xmlrpc: 离线写作
  • wlw: Windows Live Writer离线写作
  • commentReply: 评论回复

1.13 相关文章API

方法 参数 返回值 说明 使用示例
related() \(limits, \)type Object 获取相关文章 \(this->related(5)->to(\)relatedPosts)
\(this->related(5, 'author')->to(\)relatedPosts)

参数说明:

  • $limits: 默认值为5,表示显示的相关文章数量
  • \(type`: 默认值为NULL,表示文章的相关方式,只接受`author`。当`\)typeauthor时,根据用户显示相关文章;为其他值时,根据标签显示相关文章

相关文章调用示例:

<?php \(this->related(5)->to(\)relatedPosts); ?>
<ul>
    <?php while ($relatedPosts->next()): ?>
    <li><a href="<?php \(relatedPosts->permalink(); ?>" title="<?php \)relatedPosts->title(); ?>">
        <?php $relatedPosts->title(); ?>
    </a></li>
    <?php endwhile; ?>
</ul>

二、选项对象 $this->options API

2.1 基础设置API

方法 参数 返回值 说明 使用示例
title() void 输出站点标题 $this->options->title()
description() void 输出站点描述 $this->options->description()
charset() void 输出字符编码 $this->options->charset()
siteUrl() void 输出站点URL $this->options->siteUrl()

2.2 主题设置API

方法 参数 返回值 说明 使用示例
themeUrl() \(file` | void | 输出主题文件URL | `\)this->options->themeUrl('style.css')
\(this->options->themeUrl('normalize.css')`<br>`\)this->options->themeUrl('grid.css')
logoUrl string 自定义Logo地址 $this->options->logoUrl
sidebarBlock array 侧边栏配置 $this->options->sidebarBlock

2.3 评论设置API

方法 参数 返回值 说明 使用示例
commentsRequireMail bool 评论是否必填邮箱 $this->options->commentsRequireMail
commentsRequireUrl bool 评论是否必填网址 $this->options->commentsRequireUrl

2.4 用户相关API

方法 参数 返回值 说明 使用示例
profileUrl() void 输出个人资料URL $this->options->profileUrl()
logoutUrl() void 输出登出URL $this->options->logoutUrl()
adminUrl() \(url` | void | 输出后台管理URL | `\)this->options->adminUrl()
$this->options->adminUrl('login.php')
index() \(path` | void | 输出特定功能URL | `\)this->options->index('Logout.do')

2.5 RSS订阅API

方法 参数 返回值 说明 使用示例
feedUrl() void 输出文章RSS $this->options->feedUrl()
commentsFeedUrl() void 输出评论RSS $this->options->commentsFeedUrl()

三、用户对象 $this->user API

方法 参数 返回值 说明 使用示例
hasLogin() bool 用户是否已登录 $this->user->hasLogin()
screenName() void 输出用户昵称 $this->user->screenName()

四、评论对象 API ($comments)

4.1 评论循环API

方法 参数 返回值 说明 使用示例
to() \(object` | void | 将评论赋值给变量 | `\)this->comments()->to($comments)
have() bool 是否有评论 $comments->have()
next() void 移动到下一条评论 $comments->next()

4.2 评论基础API

方法 参数 返回值 说明 使用示例
listComments() void 列出所有评论 $comments->listComments()
pageNav() void 评论分页导航 $comments->pageNav()

4.3 评论信息API

方法 参数 返回值 说明 使用示例
permalink() void 输出评论所在文章链接 $comments->permalink()
author() \(autoLink` | void | 输出评论作者 | `\)comments->author()
$comments->author(false)
excerpt() \(length, \)suffix void 输出评论摘要 \(comments->excerpt(10, '[...]')`<br>`\)comments->excerpt(35, '...')
content() void 输出评论内容 $comments->content()
date() \(format` | void | 输出评论日期 | `\)comments->date('F jS, Y')
\(comments->date('h:i a')`<br>`\)comments->date('Y-m-d H:i')

4.4 评论进阶API

方法/属性 参数 返回值 说明 使用示例
theId() void 输出评论唯一ID $comments->theId()
sequence() int 评论所在楼层 $comments->sequence()
responseUrl() void 回复地址 $comments->responseUrl()
responseId() void 回复框ID $comments->responseId()
trackbackUrl() void Trackback地址 $comments->trackbackUrl()
gravatar() \(size, \)default, \(rating, \)alt void 头像显示 \(comments->gravatar(40, '', '', 'avatar')`<br>`\)comments->gravatar('40', '')
reply() \(word` | void | 回复按钮 | `\)comments->reply()
$comments->reply('回复')
threadedComments() \(options` | void | 嵌套评论 | `\)comments->threadedComments($options)
children 属性 mixed 子评论属性 if ($comments->children) { ... }
levels 属性 int 评论层级 $comments->levels
levelsAlt() \(odd, \)even void 层级交替样式 $comments->levelsAlt(' comment-level-odd', ' comment-level-even')
alt() \(odd, \)even void 交替样式 $comments->alt(' comment-odd', ' comment-even')
authorId 属性 int 作者ID $comments->authorId
ownerId 属性 int 文章作者ID $comments->ownerId

4.5 评论回复API

方法 参数 返回值 说明 使用示例
cancelReply() void 输出取消回复链接 $comments->cancelReply()

4.6 自定义嵌套评论示例

<?php function threadedComments(\(comments, \)options) {
    $commentClass = '';
    if ($comments->authorId) {
        if (\(comments->authorId == \)comments->ownerId) {
            $commentClass .= ' comment-by-author';  // 文章作者的评论
        } else {
            $commentClass .= ' comment-by-user';     // 已登录用户的评论
        }
    }
    \(commentLevelClass = \)comments->levels > 0 ? ' comment-child' : ' comment-parent';
?>

<li id="li-<?php $comments->theId(); ?>" class="comment-body<?php 
if ($comments->levels > 0) {
    echo ' comment-child';
    $comments->levelsAlt(' comment-level-odd', ' comment-level-even');
} else {
    echo ' comment-parent';
}
$comments->alt(' comment-odd', ' comment-even');
echo $commentClass;
?>">
    <div id="<?php $comments->theId(); ?>">
        <div class="comment-author">
            <?php $comments->gravatar('40', ''); ?>
            <cite class="fn"><?php $comments->author(); ?></cite>
        </div>
        <div class="comment-meta">
            <a href="<?php \(comments->permalink(); ?>"><?php \)comments->date('Y-m-d H:i'); ?></a>
            <span class="comment-reply"><?php $comments->reply(); ?></span>
        </div>
        <?php $comments->content(); ?>
    </div>
<?php if ($comments->children) { ?>
    <div class="comment-children">
        <?php \(comments->threadedComments(\)options); ?>
    </div>
<?php } ?>
</li>
<?php } ?>

五、Widget类 API

5.1 页面列表 Widget

方法 参数 说明 使用示例
\Widget\Contents\Page\Rows alloc() 分配页面列表Widget \Widget\Contents\Page\Rows::alloc()->to($pages)
- next() 移动到下一页 $pages->next()
- slug 属性 页面缩略名 $pages->slug
- permalink() 输出页面链接 $pages->permalink()
- title() 输出页面标题 $pages->title()

页面导航示例:

<nav id="nav-menu" class="clearfix" role="navigation">
    <a<?php if ($this->is('index')): ?> class="current"<?php endif; ?>
        href="<?php $this->options->siteUrl(); ?>">首页</a>
    <?php \Widget\Contents\Page\Rows::alloc()->to($pages); ?>
    <?php while ($pages->next()): ?>
        <a<?php if (\(this->is('page', \)pages->slug)): ?> class="current"<?php endif; ?>
            href="<?php $pages->permalink(); ?>"
            title="<?php \(pages->title(); ?>"><?php \)pages->title(); ?></a>
    <?php endwhile; ?>
</nav>

5.2 最新文章 Widget

方法 参数 说明 使用示例
\Widget\Contents\Post\Recent alloc() 分配最新文章Widget \Widget\Contents\Post\Recent::alloc()->parse('<li><a href="{permalink}">{title}</a></li>')
- parse() $pattern 解析输出格式 参见示例

占位符:

  • {permalink}: 文章链接
  • {title}: 文章标题

5.3 最近评论 Widget

方法 参数 说明 使用示例
\Widget\Comments\Recent alloc() 分配最近评论Widget \Widget\Comments\Recent::alloc()->to($comments)

最近评论示例:

<ul>
    <?php \Widget\Comments\Recent::alloc()->to($comments); ?>
    <?php while ($comments->next()): ?>
        <li>
            <a href="<?php \(comments->permalink(); ?>"><?php \)comments->author(false); ?></a>: 
            <?php $comments->excerpt(35, '...'); ?>
        </li>
    <?php endwhile; ?>
</ul>

5.4 分类 Widget

方法 参数 说明 使用示例
\Widget\Metas\Category\Rows alloc() 分配分类Widget \Widget\Metas\Category\Rows::alloc()->listCategories('wrapClass=widget-list')

占位符(parse模式):

  • {permalink}: 分类链接
  • {name}: 分类名称
  • {count}: 该分类下文章数
  • {description}: 分类描述

分类列表示例:

// 方法一:使用listCategories
<?php \Widget\Metas\Category\Rows::alloc()->listCategories('wrapClass=widget-list'); ?>

// 方法二:使用parse(带描述)
<?php \Widget\Metas\Category\Rows::alloc()
    ->parse('<li><a href="{permalink}" title="{description}">{name}</a> ({count})</li>'); ?>

// 方法三:获取分类描述
<?php echo $this->getDescription(); ?>

5.5 归档 Widget

方法 参数 说明 使用示例
\Widget\Contents\Post\Date alloc() $options 分配归档Widget \Widget\Contents\Post\Date::alloc('type=month&format=F Y')->parse('<li><a href="{permalink}">{date}</a></li>')

参数说明:

  • type: 归档类型 (year/month/day)
  • format: 日期格式

占位符:

  • {permalink}: 归档链接
  • {date}: 归档日期

5.6 自定义分类文章 Widget

方法 参数 说明 使用示例
\Widget\Archive alloc() \(name, \)params 自定义查询Widget \(this->widget('Widget_Archive@myCustomCategory', 'type=category', 'mid=1')->to(\)categoryPosts)

调用指定分类文章示例:

<?php 
\(this->widget('Widget_Archive@myCustomCategory', 'type=category', 'mid=1')->to(\)categoryPosts); 
if ($categoryPosts->have()):
    while ($categoryPosts->next()): 
        // 显示文章
        <a href="<?php \(categoryPosts->permalink(); ?>"><?php \)categoryPosts->title(); ?></a>
    endwhile;
endif;
?>

5.7 Widget占位符汇总表

占位符 说明 适用Widget
{permalink} 链接地址 Post\Recent, Post\Date, Category, Page
{title} 标题 Post\Recent, Post\Date, Page
{date} 日期 Post\Date
{name} 名称 Category
{count} 数量 Category
{description} 描述 Category

六、全局函数 API

6.1 翻译函数

函数 参数 返回值 说明 使用示例
_e() $string void 输出翻译文本 _e('首页')
_e('搜索')
_e('暂无评论')
_e('阅读剩余部分')
_t() $string string 返回翻译文本 _t('暂无评论')
_t('显示最新文章')

6.2 主题配置函数

函数 参数 返回值 说明 使用示例
themeConfig() \(form` | void | 主题配置回调 | `function themeConfig(\)form) { ... }
themeFields() \(layout` | void | 文章字段配置 | `function themeFields(\)layout) { ... }
themeInit() \(archive` | void | 主题初始化 | `function themeInit(\)archive) { ... }

themeInit示例:

function themeInit($archive) {
    if ($archive->is('category', 'jobs')) {
        $archive->parameter->pageSize = 10;  // 自定义分类文章显示条数
    }
}

七、表单元素 API (主题配置)

7.1 文本输入框

new \Typecho\Widget\Helper\Form\Element\Text(
    'name',           // 字段名
    null,             // 值
    null,             // 默认值
    _t('标题'),       // 标签
    _t('描述')        // 说明
)

示例:

$logoUrl = new \Typecho\Widget\Helper\Form\Element\Text(
    'logoUrl',
    null,
    null,
    _t('站点 LOGO 地址'),
    _t('在这里填入一个图片 URL 地址, 以在网站标题前加上一个 LOGO')
);
\(form->addInput(\)logoUrl->addRule('url', _t('请填写一个合法的URL地址')));

7.2 复选框

new \Typecho\Widget\Helper\Form\Element\Checkbox(
    'name',           // 字段名
    [                 // 选项
        'ShowRecentPosts'    => _t('显示最新文章'),
        'ShowRecentComments' => _t('显示最近回复'),
        'ShowCategory'       => _t('显示分类'),
        'ShowArchive'        => _t('显示归档'),
        'ShowOther'          => _t('显示其它杂项')
    ],
    ['ShowRecentPosts', 'ShowRecentComments'], // 默认选中
    _t('侧边栏显示')  // 标签
)

示例:

$sidebarBlock = new \Typecho\Widget\Helper\Form\Element\Checkbox(
    'sidebarBlock',
    [
        'ShowRecentPosts'    => _t('显示最新文章'),
        'ShowRecentComments' => _t('显示最近回复'),
        'ShowCategory'       => _t('显示分类'),
        'ShowArchive'        => _t('显示归档'),
        'ShowOther'          => _t('显示其它杂项')
    ],
    ['ShowRecentPosts', 'ShowRecentComments', 'ShowCategory', 'ShowArchive', 'ShowOther'],
    _t('侧边栏显示')
);

\(form->addInput(\)sidebarBlock->multiMode());

7.3 表单方法

方法 参数 说明 使用示例
addInput() \(element` | 添加输入元素 | `\)form->addInput($logoUrl)
addRule() \(rule, \)message 添加验证规则 $logoUrl->addRule('url', _t('请填写一个合法的URL地址'))
multiMode() 启用多选模式 $sidebarBlock->multiMode()

7.4 完整主题配置示例

<?php
if (!defined('__TYPECHO_ROOT_DIR__')) exit;

function themeConfig($form)
{
    // Logo设置
    $logoUrl = new \Typecho\Widget\Helper\Form\Element\Text(
        'logoUrl',
        null,
        null,
        _t('站点 LOGO 地址'),
        _t('在这里填入一个图片 URL 地址, 以在网站标题前加上一个 LOGO')
    );
    \(form->addInput(\)logoUrl->addRule('url', _t('请填写一个合法的URL地址')));

    // 侧边栏设置
    $sidebarBlock = new \Typecho\Widget\Helper\Form\Element\Checkbox(
        'sidebarBlock',
        [
            'ShowRecentPosts'    => _t('显示最新文章'),
            'ShowRecentComments' => _t('显示最近回复'),
            'ShowCategory'       => _t('显示分类'),
            'ShowArchive'        => _t('显示归档'),
            'ShowOther'          => _t('显示其它杂项')
        ],
        ['ShowRecentPosts', 'ShowRecentComments', 'ShowCategory', 'ShowArchive', 'ShowOther'],
        _t('侧边栏显示')
    );
    \(form->addInput(\)sidebarBlock->multiMode());
}
?>

八、自定义模板

8.1 自定义首页模板

在模板目录下创建文件(如 home.php),在文件开头添加:

<?php
/**
 * 自定义首页模板
 *
 * @package index
 */
?>

然后进入后台『设置』-『文章』页面,选择"站点首页"中的"直接调用[home.php]模板文件",保存即可。


8.2 自定义页面模板

在模板目录下创建文件,在文件开头添加:

<?php
/**
 * 自定义页面模板
 *
 * @package custom
 */
?>

其中 @package custom 是必须的,然后进入 Typecho 后台在『创建页面』的【展开高级选项】里就可以看到并选择该模板。


8.3 自定义分类模板

方法一: 直接在模板目录下建立一个名为 category 的目录,然后在里面放上以分类缩略名为文件名的 php 文件。例如访问缩略名为 default 的分类时,会自动调用 category/default.php

方法二: 在模板文件中使用 is 语法判断:

<?php if ($this->is('category', 'default')): ?>
    <!-- 默认分类模板 -->
<?php endif; ?>
<?php if ($this->is('category', 'category2')): ?>
    <!-- 分类2模板 -->
<?php endif; ?>

8.4 自定义404页面

  1. 制作一个HTML页面,命名为 404.php
  2. 把页面放到当前模板目录下即可

8.5 自定义错误页面

  1. 创建一个php文件(有两个变量可以直接使用:\(code`和`\)message,分别代表错误代码和错误信息)
  2. 把文件传到服务器某个路径
  3. 打开 config.inc.php,加入:define('__TYPECHO_EXCEPTION_FILE__', '你的文件路径');

九、进阶功能

9.1 面包屑导航

<div class="crumbs_patch">
    <a href="<?php $this->options->siteUrl(); ?>">首页</a> &raquo;
    <?php if ($this->is('index')): ?>
        最新文章
    <?php elseif ($this->is('post')): ?>
        <?php \(this->category(); ?> &raquo; <?php \)this->title() ?>
    <?php else: ?>
        <?php $this->archiveTitle(' &raquo; ', '', ''); ?>
    <?php endif; ?>
</div>

9.2 相关文章

<?php \(this->related(5)->to(\)relatedPosts); ?>
<ul>
    <?php while ($relatedPosts->next()): ?>
    <li><a href="<?php \(relatedPosts->permalink(); ?>" title="<?php \)relatedPosts->title(); ?>">
        <?php $relatedPosts->title(); ?>
    </a></li>
    <?php endwhile; ?>
</ul>

9.3 分离评论和引用通告

<!-- 只显示评论 -->
<?php \(this->comments('comment')->to(\)comments); ?>
<?php if ($comments->have()): ?>
    <h3>评论</h3>
    <ol>
        <?php while ($comments->next()): ?>
        <li id="<?php $comments->theId() ?>">
            <div class="comment_data">
                <?php $comments->gravatar(32, '', '', 'avatar'); ?>
                <span><?php $comments->author() ?></span> 说:<br />
                <?php \(comments->date('F jS, Y'); ?> at <?php \)comments->date('h:i a'); ?>
            </div>
            <div class="comment_text"><?php $comments->content() ?></div>
        </li>
        <?php endwhile; ?>
    </ol>
<?php endif; ?>

<!-- 只显示Pingback -->
<?php \(this->comments('pingback')->to(\)pingbacks); ?>
<?php if ($pingbacks->have()): ?>
    <h3>Pingbacks</h3>
    <ol>
        <?php while ($pingbacks->next()): ?>
            <li id="<?php $pingbacks->theId() ?>">
                <?php \(pingbacks->author() ?> <?php \)pingbacks->date('F jS, Y'); ?>
            </li>
        <?php endwhile; ?>
    </ol>
<?php endif; ?>

十、文件功能映射表

文件 主要功能 涉及API类型 主要API示例
404.php 404错误页面 模板加载、翻译、表单提交 $this->need(), _e(), 搜索表单
comments.php 评论展示与提交 评论API、用户API、表单 \(this->comments()`, `\)comments->author(), \(this->allow()`, `\)this->commentUrl()
footer.php 页脚输出 选项API、日期函数 \(this->options->siteUrl()`, `\)this->options->title(), $this->footer()
functions.php 主题配置与自定义函数 表单API、自定义函数 themeConfig(), themeFields(), Form\Element\Text
header.php 页头与导航 选项API、页面判断、Widget \(this->options->charset()`, `\)this->archiveTitle(), $this->is(), \Widget\Contents\Page\Rows
index.php 文章列表 文章循环、内容API、分页 \(this->have()`, `\)this->next(), \(this->content()`, `\)this->pageNav()
page.php 独立页面 文章内容、模板加载 \(this->content()`, `\)this->need()
post.php 文章详情 文章内容、标签、导航 \(this->content()`, `\)this->tags(), \(this->thePrev()`, `\)this->theNext()
sidebar.php 侧边栏小工具 Widget API、用户API \Widget\Contents\Post\Recent, \Widget\Comments\Recent, \Widget\Metas\Category\Rows, $this->user->hasLogin()

十一、常用代码片段

11.1 文章信息显示

<div class="post-meta">
    <li>作者: <a href="<?php \(archive->author->permalink(); ?>"><?php \)archive->author(); ?></a></li>
    <li>时间: <time datetime="<?php \(archive->date('c'); ?>"><?php \)archive->date(); ?></time></li>
    <li>分类: <?php $archive->category(','); ?></li>
    <li>评论: <a href="<?php \(archive->permalink() ?>#comments"><?php \)archive->commentsNum(_t('暂无评论'), _t('1 条评论'), _t('%d 条评论')); ?></a></li>
</div>

11.2 侧边栏小工具

<!-- 最新文章 -->
<section class="widget">
    <h3 class="widget-title">最新文章</h3>
    <ul class="widget-list">
        <?php \Widget\Contents\Post\Recent::alloc()
            ->parse('<li><a href="{permalink}">{title}</a></li>'); ?>
    </ul>
</section>

<!-- 最近评论 -->
<section class="widget">
    <h3 class="widget-title">最近回复</h3>
    <ul class="widget-list">
        <?php \Widget\Comments\Recent::alloc()->to($comments); ?>
        <?php while ($comments->next()): ?>
            <li>
                <a href="<?php \(comments->permalink(); ?>"><?php \)comments->author(false); ?></a>: 
                <?php $comments->excerpt(35, '...'); ?>
            </li>
        <?php endwhile; ?>
    </ul>
</section>

<!-- 分类列表 -->
<section class="widget">
    <h3 class="widget-title">分类</h3>
    <?php \Widget\Metas\Category\Rows::alloc()->listCategories('wrapClass=widget-list'); ?>
</section>

<!-- 归档 -->
<section class="widget">
    <h3 class="widget-title">归档</h3>
    <ul class="widget-list">
        <?php \Widget\Contents\Post\Date::alloc('type=month&format=F Y')
            ->parse('<li><a href="{permalink}">{date}</a></li>'); ?>
    </ul>
</section>

11.3 评论表单

<?php if ($this->allow('comment')): ?>
    <div id="<?php $this->respondId(); ?>" class="respond">
        <div class="cancel-comment-reply">
            <?php $comments->cancelReply(); ?>
        </div>

        <h3 id="response">添加新评论</h3>
        <form method="post" action="<?php $this->commentUrl() ?>" id="comment-form" role="form">
            <?php if ($this->user->hasLogin()): ?>
                <p>登录身份: <a href="<?php $this->options->profileUrl(); ?>">
                    <?php $this->user->screenName(); ?>
                </a>. 
                <a href="<?php $this->options->logoutUrl(); ?>" title="Logout">退出 &raquo;</a></p>
            <?php else: ?>
                <p>
                    <label for="author" class="required">称呼</label>
                    <input type="text" name="author" id="author" class="text"
                           value="<?php $this->remember('author'); ?>" required/>
                </p>
                <p>
                    <label for="mail" class="required">Email</label>
                    <input type="email" name="mail" id="mail" class="text"
                           value="<?php \(this->remember('mail'); ?>"<?php if (\)this->options->commentsRequireMail): ?> required<?php endif; ?> />
                </p>
                <p>
                    <label for="url">网站</label>
                    <input type="url" name="url" id="url" class="text" placeholder="http://"
                           value="<?php \(this->remember('url'); ?>"<?php if (\)this->options->commentsRequireUrl): ?> required<?php endif; ?> />
                </p>
            <?php endif; ?>
            <p>
                <label for="textarea" class="required">内容</label>
                <textarea rows="8" cols="50" name="text" id="textarea" class="textarea"
                          required><?php $this->remember('text'); ?></textarea>
            </p>
            <p>
                <button type="submit" class="submit">提交评论</button>
            </p>
        </form>
    </div>
<?php else: ?>
    <h3>评论已关闭</h3>
<?php endif; ?>

十二、注意事项

  1. 安全防护:所有模板文件开头必须包含:

    <?php if (!defined('__TYPECHO_ROOT_DIR__')) exit; ?>
  2. 主题注释:模板信息注释格式:

    /**
     * 主题描述
     *
     * @package 主题名
     * @author 作者名
     * @version 版本号
     * @link 作者网站
     */
  3. 自定义模板

    • 自定义首页:@package index
    • 自定义页面:@package custom
  4. 主题初始化themeInit() 函数在版本 Revision: 1466 (2010-06-28) 及以后有效

  5. 嵌套评论:使用自定义评论函数时,记得添加审核提示:

    <?php $singleCommentOptions->commentStatus(); ?>
  6. Widget占位符:不同Widget支持的占位符不同,请参考具体文档


附录:常量与变量

常用常量

常量 说明
__TYPECHO_ROOT_DIR__ Typecho根目录
__TYPECHO_EXCEPTION_FILE__ 自定义错误页面路径

常用变量

变量名 类型 说明
$this Object 当前上下文对象
$comments Object 评论对象
$pages Object 页面对象
$form Object 表单对象
$archive Object 存档对象(函数参数)

文档结束

本文档整理了Typecho主题开发中所有可用的API,涵盖了模板开发的核心功能。如有遗漏或错误,欢迎反馈补充。

最后更新时间: 2026年2月3日