I had a client last year, call him Dave, who was obsessed with his site’s design system. Every button had to have a specific hover, focus and active state. My theme.json was only doing half the work back then, so I ended up with a large custom CSS file just to handle button interactions, and it was miserable to maintain. Every time Dave wanted a new primary brand color I had to find and replace hex codes in three different places. Gutenberg block updates usually feel like incremental polish, but version 22.2 fixes a few of these annoyances.
The standout for me in this December 3rd release is support for button pseudo-states directly in theme.json. When block themes first launched, my plan was to keep using the Customizer for hovers, because the theme.json approach did not look ready. That was wrong. Keeping everything in the JSON file gives you one place to define the design system, which is cleaner than enqueueing an extra stylesheet just for a button glow.
Styling button pseudo-states with the new Gutenberg block updates
The new structure nests :hover and :focus directly under the button block styling. It saves time and heads off the specificity wars that show up later. Note our agency’s standard prefixing on the color variables.
{
"styles": {
"blocks": {
"core/button": {
"color": {
"background": "var(--wp--preset--color--bbioon-primary)"
},
":hover": {
"color": {
"background": "var(--wp--preset--color--bbioon-accent)"
}
},
":focus": {
"color": {
"background": "var(--wp--preset--color--bbioon-secondary)"
}
}
}
}
}
}
Then there is the Cover block. We have all been there: a client wants a high-def video background, and suddenly you are hosting a 40MB MP4 on a server that is already struggling. It hurts performance and it inflates the hosting bill. Gutenberg 22.2 lets you use YouTube and Vimeo embeds as Cover block backgrounds instead, so you no longer have to hack together custom render filters to offload the bandwidth. Most of this release is about doing less work for the same result, which is something I have been arguing for over 14 years.
There is also some solid work on the Breadcrumbs block. It is still experimental, but the new support for post type archives and paginated content makes it usable on complex site structures. The full changelog is on the official WordPress core blog, and the accessibility work, including the fix for the “Invalid” nav item alerts, suggests the team is spending time on the unglamorous parts too. With WordPress 6.9 having just dropped, these 161 PRs lean heavily toward bug fixes and performance polish.
The reality of moving to block-based logic
This stuff gets complicated fast. If you’re tired of debugging someone else’s mess and you just want your site to work, drop my team a line. We’ve probably seen it before. The shift toward a configuration-first approach in WordPress is a good thing, but only once you know which levers to pull.
So stop fighting the editor. The new “Activity layout” in Data Views, which is handy for tracking revisions or logs, is another sign that Gutenberg is growing into a serious administrative tool. Building sites the way we did in 2018 mostly creates technical debt for your future self. Get comfortable with theme.json and start offloading your media, and your server will cost you less to run.