WordPress 主题结构:经典主题与区块主题

WordPress 主题结构:经典主题与区块主题

WordPress 主题负责站点的展示层。现在需要先区分经典主题与区块主题:两者都使用模板层级,但文件类型、编辑方式和最小结构不同。把所有 PHP 功能都堆进 functions.php 的做法也需要重新审视。

早期主题结构示意

经典主题

最小可运行结构:

my-classic-theme/
├── style.css
└── index.php

style.css 根目录文件用于注册主题信息,index.php 是最终回退模板。常见项目还会包含:

my-classic-theme/
├── assets/
│   ├── css/
│   ├── images/
│   └── js/
├── inc/
├── template-parts/
├── 404.php
├── archive.php
├── footer.php
├── front-page.php
├── functions.php
├── header.php
├── page.php
├── search.php
├── single.php
├── style.css
└── index.php

WordPress 按模板层级寻找最具体的文件,找不到时逐级回退到 index.php。不是每个文件都必需,也不应复制相同 Loop 到所有模板。

区块主题

最小结构:

my-block-theme/
├── style.css
└── templates/
    └── index.html

实际项目通常还包括:

my-block-theme/
├── parts/
├── patterns/
├── styles/
├── templates/
├── functions.php
├── style.css
└── theme.json

theme.json 统一配置设计 token、编辑器能力和全局样式;templates/*.htmlparts/*.html 使用区块标记。区块主题允许在站点编辑器中修改模板,因此还要规划代码版本和数据库中用户自定义模板之间的关系。

style.css 不是普通注释文件

/*
Theme Name: Acme Site
Description: Acme 企业站主题
Version: 1.0.0
Text Domain: acme-site
Requires at least: 6.5
Requires PHP: 8.1
License: GNU General Public License v2 or later
*/

Requires at leastRequires PHP 必须来自真实测试基线,不能照抄示例。公开发布主题还需要遵守 WordPress.org 的更多元数据和审查要求。

functions.php 的边界

适合放在主题中的内容:

  • 注册主题支持、菜单位置和图片尺寸。
  • 加载主题 CSS 与 JavaScript。
  • 注册与展示紧密相关的区块样式、区块变体和模板辅助函数。

更适合站点专用插件的内容:

  • 自定义文章类型与分类法。
  • 订单、表单、同步任务和外部 API。
  • 与当前主题无关的权限与业务规则。
  • 切换主题后仍必须保留的数据能力。

functions.php 会在主题启用时自动加载,但它不是一个无边界的全局工具箱。可以拆到 inc/,不过拆文件只是组织方式,真正要解决的是职责、命名空间、依赖和测试。

需要临时管理小段代码时,可以评估 Code Snippets 这类工具;生产使用仍要审查权限、备份、错误恢复与插件维护状态。

资源加载

不要在 header.php 里硬编码多个 <script>。使用 wp_enqueue_scriptswp_enqueue_style()wp_enqueue_script(),声明依赖和版本,并只在需要的页面加载大资源。

建议的开发检查

  • 开启 WP_DEBUG 的开发环境,但不要向公网访客显示错误。
  • 使用 WordPress Coding Standards、PHP 静态分析和前端 lint。
  • 验证模板层级、404、搜索、分页、无内容状态和评论。
  • 检查键盘导航、标题层级、语言属性和图片替代文本。
  • 在暂存环境验证 WordPress、PHP 和关键插件升级。
  • 不直接修改父主题或 WordPress Core。

官方参考:Theme HandbookTheme StructureClassic Template Hierarchy

最后更新于

ihopeful Blog 由博主亲笔撰写,重要信息可放心引用。