Linux 软件免费装

Synced Patterns for Themes

开发者 twentybellows
pbking
更新时间 2026年8月30日 00:35
PHP版本: 7.4 及以上
WordPress版本: 7.1
版权: GPL-2.0-or-later
版权网址: 版权信息

标签

themes patterns block patterns block bindings synced patterns

下载

2.0.0 2.0.1 1.0.0 1.2.0 1.2.1

详情介绍:

A theme pattern is usually two things at once: a design, and the words that happen to be sitting in it. Reuse the design and you copy the words with it — so a theme that wants five hero sections ships five near-identical patterns. This plugin separates the two. A pattern marks the parts of itself that are meant to be filled in, and any other pattern — or template, or post — can then use that design and say what goes in it: <!-- wp:pattern {"slug":"mytheme/hero","content":{"headline":{"content":"Built for the long haul"}}} /--> One design pattern. As many uses as you like, each with its own content, all expressed in theme files. The content attribute here is not new: it is the same attribute WordPress already puts on a synced pattern when you edit one of its fields. All this plugin does is let a theme pattern accept it too. Marking the parts to fill in In the design pattern, give each block you want filled a name and mark it as a slot. This is core's Pattern Overrides syntax, unchanged: ` Headline goes here metadata.namenames the slot.__default` opens up every attribute the block supports, and is the form to reach for: it is the only one WordPress will let someone type into inside a synced pattern. Naming attributes one by one instead — {"content":{"source":"core/pattern-overrides"}} — also works when the content comes from markup, and is worth using when you want to fill exactly one attribute and leave the rest alone. Filling them in Anywhere a pattern can be used, content supplies the values — keyed by slot name, then by attribute name: ` ` Any slot you leave out keeps the design pattern's own content, so a pattern's defaults double as its documentation. Keeping a pattern linked By default a pattern is a starting point: insert it and you get ordinary blocks you are free to change. Add Synced: yes to a pattern's header and it behaves like a synced pattern instead: ` ` Inserting it stores a reference rather than a copy. The design is rendered from the theme file and cannot be edited on the page — only the content slots can. Edit the file and every notice on the site changes with it, keeping whatever content each one was given. The block toolbar offers Reset, which puts the pattern's own content back, and Detach, which breaks the link and leaves ordinary editable blocks with the instance's content baked in. Unlike version 1, nothing is copied into the database to make this work: the theme file stays the only source of truth. Slots in a synced pattern have to bind with __default. WordPress renders any other binding read-only inside an instance — that is its rule, not this plugin's. Where it works Patterns, templates, template parts, post content, and patterns inside other patterns, to any depth. Inserting an ordinary pattern that fills another gives you plain editable blocks with the right content already in them. Inserting one marked Synced: yes gives you a live instance instead, still linked to its file. What can be filled The blocks and attributes WordPress supports for Pattern Overrides: The list is core's, not this plugin's, so it grows as core's does.

安装:

  1. Install and activate the plugin.
  2. Add metadata.name and a core/pattern-overrides binding to each block in a theme pattern you want to fill in.
  3. Use that pattern from another pattern, template or post, passing a content attribute on the pattern block.
  4. Optionally add Synced: yes to the design pattern's header, so inserting it keeps it linked to the file rather than copying it.
No settings, no admin screen. Nothing is written to the database.

升级注意事项:

2.0.0 A rewrite. Theme patterns are no longer copied into the database: Synced: yes now keeps a pattern linked to its file instead. The pb_block posts version 1 created are unused and safe to delete. Requires WordPress 6.8.

常见问题:

Do I need to mark my patterns as synced?

Only if you want them to stay linked when someone inserts them. Filling a pattern's content from block markup needs no header at all. Synced: yes means what it says now — the pattern is inserted as a reference to the theme file, and edits to that file reach every use. Version 1 used the same header to copy the pattern into the database as a wp_block; version 2 keeps the file as the only source of truth.

Can a plugin's patterns be synced?

Yes. A plugin's patterns have no file header to read, so they opt in through a filter: add_filter( 'synced_patterns_for_themes_synced_patterns', function ( $slugs ) { $slugs[] = 'myplugin/notice'; return $slugs; } );

What happens to the posts version 1 created?

They stop being used. They are pb_block posts, invisible in the admin, and safe to delete.

Is this the same as Pattern Overrides on a synced pattern?

It is the same mechanism, aimed somewhere else. Pattern Overrides let a person fill in a synced pattern from the editor, and the values live in the database. This lets a theme fill in a pattern from block markup, and the values live in the theme.

Should the design pattern be hidden from the inserter?

It depends which half you are using. A pattern that only ever gets filled in from markup has little to offer on its own, so Inserter: no keeps it out of the way. A pattern marked Synced: yes is meant to be inserted, so leave it visible — the plugin makes sure it is offered exactly once, as a live instance.

Why does the Patterns screen say "Not synced"?

Because WordPress decides that label by pattern type, not by behaviour: every pattern that is not a user pattern is reported as unsynced, with no filter to change it. The lock beside it is right — the pattern lives in a file and cannot be edited from the admin — but the wording is WordPress's, and this plugin cannot correct it.

Does it work in the site editor?

Yes. Patterns, templates and template parts are all composed before the editor loads them, so what you see is what the front end renders.

What if I use a slot name that the design pattern doesn't have?

Nothing happens. Unknown slots are ignored, and slots with no value keep the design pattern's own content.

更新日志:

2.0.1 2.0.0 1.2.0 1.0.0