跳到主内容

WordPress 区块图案在模板中复用:用 Pattern 块落地 pattern-first 思维,少写重复代码

100%
WordPress 区块图案在模板中复用:用 Pattern 块落地 pattern-first 思维,少写重复代码

一句话结论

在 WordPress 区块主题里,与其在多个模板里复制同一段区块代码,不如把公共部分注册成一个 Pattern,再用 Pattern 块(<!-- wp:pattern --> 形式的块标记)在模板和模板部件里一行调用——这就是 pattern-first 思维,能直接砍掉几十行重复代码。

为什么要在模板里用图案

区块图案(Block Pattern)不只是「用户在编辑器里能插入的版式」,它的真正威力在于直接进主题的前端输出。两个核心动机:

  • PHP 接入:区块模板和模板部件是 HTML 文件,需要动态能力时要用到 PHP 函数(详情见「在图案中使用 PHP 」文档);
  • DRY 原则:模板里重复出现的版式(比如首页、归档、搜索页共用的 Query Loop 布局)应该抽成一个图案,而不是在三个文件里各写一遍。

WordPress 官方在剖析 Twenty Twenty-Two 默认主题时发现:index.html 、 home.html 、 search.html 的查询文章输出完全一样,却各写了 33 行重复代码。改用一行 Pattern 调用即可——这就是典型的「低垂果实」。

核心机制:Pattern 块

除了在「注册图案」里登记的图案,WordPress 还提供了一个名为 Pattern 的块。它不在编辑器插入器里出现,主要给主题作者用。关键点:必须设 slug 参数,且值要包含命名空间 + 图案 slug。

<!-- wp:pattern {"slug":"themeslug/hero"} /-->

不仅自己主题的图案能这么引,WordPress 核心或插件注册的图案也能用——只要填对 slug 。

三步落地:以 hero 图案为例


  1. 在主题 /patterns 目录新建 hero.php,用文件头注释注册图案(命名空间建议用主题目录名,如 themeslug/hero)。

  2. 在模板(如 /templates/home.html)的 header 之下插入 [!-- wp:pattern {"slug":"themeslug/hero"} /--]。

  3. 到站点编辑器(外观 → 编辑器 → 模板)打开对应模板,确认图案已渲染;模板部件(template part)里用同样写法即可。

<!-- wp:template-part {"slug":"header","tagName":"header"} /-->
<!-- wp:group {"tagName":"main","layout":{"type":"constrained"}} -->
  <!-- wp:pattern {"slug":"themeslug/hero"} /-->
<!-- /wp:group -->
<!-- wp:template-part {"slug":"footer","tagName":"footer"} /-->

更进一步:起步图案(Starter Patterns)

图案还能当「入口起点」给最终用户:

类型触发位置用途
Page Patterns页面 → 新建用户新建页面时给一套现成版式
Template Patterns站点编辑器 → 新建模板用户建模板时给含 header/footer 的整模板起点

注册页图案只要在文件头设 Block Types: core/post-content 和 Post Types;模板图案则设 Template Types(如 front-page, home)。模板图案通常把 Inserter 设为 no,避免与普通插入图案混淆。

pattern-first 思维的本质

经典主题开发是「模板优先」:模板里塞满结构。区块时代可以把前端看成「一组重复的代码组」。把首页/归档/单篇/侧边栏/页脚拆成几个主区域,每个区域做成一个图案,模板文件里就只剩 <!-- wp:pattern --> 调用。主题作者没丢能力,用户反而能直接拿图案去拼自己的页面——这是双赢。
读 WordPress 官方 Patterns 开发文档

常见问题(FAQ)


Pattern 块和「注册图案」是一回事吗?
不是。注册图案是你在 /patterns 里登记、用户能在插入器选用的版式;Pattern 块是一个特殊块,专门用来在模板/模板部件里调用某个图案(包括核心和插件的)。

slug 为什么要带命名空间?
WordPress 用「命名空间/图案名」避免不同主题/插件的图案重名冲突。填错命名空间会调不到你想要的图案。

模板部件(template part)里也能用 Pattern 吗?
能。 Pattern 块在模板和模板部件里的写法完全一致,都是一行 <!-- wp:pattern {"slug":"..."} /-->。

pattern-first 会让主题失去灵活性吗?
不会。主题作者保留全部控制权,只是把重复代码抽成可复用图案;用户还能把图案直接拖进自己的页面,能力更强。

延伸阅读

这篇有帮助吗?
云上的幻象
云上的幻象查看主页

七彩云博客,分享 WordPress 建站实战与 AI 工具测评,覆盖服务器运维、站长工具、软件资源与电商运营干货,专注原创实用的主题插件、网站加速与安全优化教程。

892文章4评论

相关文章

评论 (0)

欢迎你,新朋友,感谢参与互动!文明发言,理性交流 · 首次评论将在审核后展示