| 开发者 |
twentybellows
pbking |
|---|---|
| 更新时间 | 2026年8月30日 00:35 |
| PHP版本: | 7.4 及以上 |
| WordPress版本: | 7.1 |
| 版权: | GPL-2.0-or-later |
| 版权网址: | 版权信息 |
<!-- 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:
contenturl, alt, title, idtext, url, linkTarget, relcontent (WordPress 7.1 and later)metadata.name and a core/pattern-overrides binding to each block in a
theme pattern you want to fill in.content
attribute on the pattern block.Synced: yes to the design pattern's header, so inserting it
keeps it linked to the file rather than copying it.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.
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; } );
They stop being used. They are pb_block posts, invisible in the admin, and safe
to delete.
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.
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.
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.
Yes. Patterns, templates and template parts are all composed before the editor loads them, so what you see is what the front end renders.
Nothing happens. Unknown slots are ignored, and slots with no value keep the design pattern's own content.
content attribute, so one pattern supplies the
words for another pattern's design. Works in patterns, templates, template
parts and post content, and through patterns nested in patterns.Synced: yes in a pattern header keeps a pattern linked when someone inserts
it: the page stores a reference, the design renders from the theme file and
cannot be edited there, and editing the file reaches every instance.pb_block post type version
1 created, the twelve capabilities it granted, the writes it made on every
request, and the REST filters that made those posts look like reusable blocks
are all gone..php and .html files, and plugins — instead of a glob over the
active theme's patterns/*.php.synced_patterns_for_themes_synced_patterns filter, so patterns
registered by a plugin can be synced too.__default; WordPress renders any
other binding read-only inside an instance.