使用Timber开发WordPress主题时,推荐的文件夹与文件结构是什么?
Hey there! 刚上手Timber+Twig+ACF搭WordPress主题,文件结构确实容易乱——我当初第一次用的时候也踩过这个坑,给你分享一套业内常用的清晰结构,绝对能帮你理顺:
核心文件结构(基于WordPress规范+Timber最佳实践)
1. 主题根目录的核心PHP文件
- 保留WordPress必需的基础文件:
style.css(主题声明头)、functions.php(核心配置入口,用来注册Timber、ACF字段、自定义文章类型等)、index.php(作为fallback模板,里面只需要简单调用Timber的渲染方法)、screenshot.png(主题预览图) - 把自定义PHP功能拆分成模块化子文件夹:
inc/:存放各类功能模块,比如timber-setup.php(配置Timber的视图路径、全局变量)、acf-fields.php(注册ACF字段组,或者配置ACF的JSON同步)、custom-post-types.php(定义自定义文章类型和分类法)template-parts/:如果有需要复用的PHP逻辑片段(比如面包屑数据处理),可以放这里,但记住Timber的核心是「逻辑与视图分离」,这里只处理数据获取,渲染交给Twig
2. Twig模板的规整(重点!)
Timber的优势就是让视图脱离PHP逻辑,所以Twig文件要单独建views/文件夹统一管理,按功能拆分:
layouts/:存放基础布局模板,比如base.twig(包含完整HTML骨架、头部、尾部,用{% block content %}留出自定义内容区域)、single-layout.twig(文章页专属布局)、archive-layout.twig(归档页布局)pages/:对应WordPress的页面模板,比如home.twig(首页)、about.twig(关于页)、contact.twig(联系页),这些模板都继承layouts/base.twig,只需要填充content区块的内容partials/:存放可复用的Twig片段,比如header.twig(头部导航、logo)、footer.twig(版权信息、底部菜单),还可以专门建acf-components/子文件夹,把ACF字段对应的渲染组件放这里,比如testimonial.twig、featured-card.twig——把ACF字段调用封装在这里,复用起来超方便single/:对应自定义文章类型的单页模板,比如single-project.twig(项目单页)、single-event.twig(活动单页)archive/:归档页模板,比如archive-project.twig(项目列表归档)
3. ACF相关的额外整理
- 开启ACF的JSON同步功能,在
functions.php里设置JSON存储路径为acf-json/,这样字段组可以纳入版本控制,团队协作也不会丢配置 - 遇到ACF灵活内容字段这类复杂布局时,把每个布局对应的Twig片段放到
views/partials/acf-components/里,在页面模板里用循环调用这些片段,代码会非常整洁
4. 静态资源的管理
- 根目录建
assets/文件夹,按类型细分:css/:存放编译后的样式文件(如果用SCSS,可再建scss/放源文件,编译后输出到css/)js/:自定义脚本,比如main.js、acf-enhance.js(处理ACF相关的交互逻辑)images/:主题用到的静态图片,比如logo、背景图fonts/:自定义字体文件
举个直观的目录结构示例
your-theme/ ├── assets/ │ ├── css/ │ ├── js/ │ ├── images/ │ └── fonts/ ├── inc/ │ ├── timber-setup.php │ ├── acf-fields.php │ └── custom-post-types.php ├── views/ │ ├── layouts/ │ │ └── base.twig │ ├── pages/ │ │ ├── home.twig │ │ └── about.twig │ ├── partials/ │ │ ├── header.twig │ │ ├── footer.twig │ │ └── acf-components/ │ │ └── testimonial.twig │ ├── single/ │ │ └── single-project.twig │ └── archive/ │ └── archive-project.twig ├── acf-json/ ├── functions.php ├── style.css ├── index.php └── screenshot.png
这样拆分后,你找文件的逻辑会清晰很多:PHP管数据和配置,Twig管视图渲染,静态资源单独归类,后期维护或者加新功能都不会乱。如果有特定需求(比如多语言、电商功能),再对应添加子文件夹就行~
内容的提问来源于stack exchange,提问作者Juan Antonio Rodríguez Gabriel
相关产品推荐
相关产品推荐

