A Deep Introduction to WordPress Block Themes
Publikováno: 4.2.2022
The relatively new WordPress editor, also known as the WordPress Block Editor, always under development via the Gutenberg plugin, has been with us since 2018. You can use the block editor on any WordPress theme, provided the theme …
A Deep Introduction to WordPress Block Themes originally published on CSS-Tricks. You should get the newsletter and become a supporter.
The relatively new WordPress editor, also known as the WordPress Block Editor, always under development via the Gutenberg plugin, has been with us since 2018. You can use the block editor on any WordPress theme, provided the theme loads CSS that the blocks use. But there are new themes that lean into the Block Editor much more deeply.
WordPress Block Themes allow you to build out the entire site using blocks, meaning the theme’s responsibly is mostly design guidelines, and less about controlling the pages and the content on them. This is referred to as Full-Site Editing in WordPress and the themes that are built for this are called Block Themes, because you build out everything with blocks.
Let’s dig into all this.
Table of Contents
- Introduction
- Related terminology
- Using the block editor with classic themes
- The anatomy of block-based themes
- Creating WordPress Block Themes
- Global settings and styles (theme.json)
- WordPress Block Theme approaches
- Block themes that are currently in use
- Building Block Child Themes
- Some personal thoughts
- Resources
Introduction
Except for those who follow its day-to-day development iterations at GitHub, most development surrounding the block editor is largely visible to users — and that’s not necessarily a bad thing. I have been personally trying to keep myself updated with the block editor through WP Tavern and Gutenberg posts, and have been using both the legacy — or “Classic” editor — as well as the block editor in my personal learning project sites.
After taking a detour to learn and experience headless WordPress sites with Gatsby and Frontity frameworks, I am now back to my native WordPress home.
Though I have been aware of the WordPress theme-experiment GitHub repository for a while — themes made completely out of blocks! — I have only started digging into block themes recently. In fact, I have been using an experimental block-based theme here in this project site.
WordPress 5.9 is now out in the wild and with it comes block-based theming for the masses. This release, dubbed Joséphine, is the formal introduction to WordPress full site editing and Block Themes.
Even though the block-based theming functionality has been available in various iterative forms in previous releases, this is a big deal for the WordPress platform and the ecosystem that relies on it. I’ve had my hands on it and thought I’d share what I’ve learned about block themes in my hands-on experience, as well as some personal thoughts on how it works.
Disclaimer: I am not a block themes expert by any stretch. I am well-versed in WordPress and a major fan of the content management system. My goal here is not to critique WordPress 5.9 or steer you in the direction of whether or not you should like it or want to use it. I’m merely coming from the perspective of an open-minded learner who is building personal sites with fairly deep understanding and familiarity with the WordPress Block Editor.
Related terminology
Before we dive straight into block themes, I think it’s a good idea to form a baseline understanding of just what we’re talking about when we’re tossing around terms, like blocks and site editing, as they’re so incredibly new and game-changing relative to what we’ve known and loved about WordPress for decades.
Block Editor
This is really what we mean any time we refer to the “WordPress Editor.” We call the WordPress Editor the Block Editor because it allows us to create pages and posts where each element— including text, images, videos, headers, footers, etc. — is inserted into the post using blocks that can be arranged modularly to complete page layouts. It evolved from what’s now called the “classic” editor, which was more squarely based on entering content to be published on a page or post in a predefined layout.
It’s sort of like content and layout coming together, where both are managed in the WordPress Editor. So, where we used to rely on the editor for content and (more or less) theme templates to define layout, both are directly editable in the WordPress Editor interface.
You can find more detail here on using the Block Editor.
Block Theme
As explained in the WordPress docs:
A block theme is a WordPress theme with templates entirely composed of blocks so that in addition to the post content of the different post types (pages, posts, …), the block editor can also be used to edit all areas of the site: headers, footers, sidebars, etc.
This WordPress documentation provides an overview of block themes in its knowledgebase, including how to create block themes and stylingin this primer.
The bottom line: Block themes are different than “classic” WordPress themes. Rather than relying strictly on PHP files that conform to the WordPress Template Hierarchy, a WordPress Block Theme consists of block-based HTML templates — assembled groups of blocks that can be styled and arranged in the WordPress Site Editor (that’s coming up next) as well as using a theme.json
file for global styling tokens.
Site Editor
This is the crown jewel of WordPress 5.9. While it is officially called the WordPress Site Editor, it’s largely been referred to as Full-Site Editing** (FSE) during development and is described as “the cohesive experience that allows you to directly edit and navigate between various templates, template parts, styling options, and more.” Phew, that’s a lot!
The WordPress Site Editor allows us to create and editing templates that are made of blocks. So the idea is that we can assemble a group of blocks that can be applied globally to a site. Like a header component, for example. That might consist of blocks for a site logo, a primary menu, and a tagline. The site editor allows us to create a new block theme or modify an existing theme to give the site’s global appearance a completely new look without writing a line of code.
So, you know how you’ve had to build a theme in the past with a bunch of PHP templates? That’s no longer the case. Theme “development” now has a UI that’s available directly in WordPress.
More detail on using site editor is in the WordPress documentation.
The official WordPress Glossary has additional terms and definitions you may want to explore as we dig deeper into WordPress Block Themes and FSE.
Using the block editor with classic themes
The WordPress Block Editor can be used in both the classic and block themes. When the Gutenberg editor project began, the classic TinyMCE-based editor was detached from WordPress Core into the Classic Editor plugin. As long as the Classic Editor plugin is installed and active, content writing is pretty normal as it was before blocks were introduced.
Prior to the formal introduction of block editor features, we had to install the experimental Gutenberg plugin. By simply switching plugins, individual page or post contents could be created with either editor. The WordPress 5.0 release introduced the block editor alongside the default Twenty Nineteen theme, demonstrating how to add block editor features and explore its power.
In other words, the evolution toward FSE has been building for a while. And because of that, we get to enjoy a high level of backwards compatibility that allows us all to adopt block-based features when we’re good and ready.
The anatomy of block-based themes
Experimental block-based themes have been in development since early 2020. At the time I’m writing this, the GitHub theme experiment repository lists 12 block themes that explore some aspect of creating themes using blocks or block templates.
But it was probably the Twenty Twenty-One theme that was the first “default” theme to make blocks a first-class citizen, introducing block styles and block patterns, though the recently updated versions of Twenty Nineteen, and Twenty Twenty also include bundled block styling and block patterns. Currently, there are more than 130 themes from the community with bundled block editor patterns, block styles feature, including my favorite, Anders Noren’s Eksell theme.
With the ongoing development of the WordPress Block Editor’s FSE features, even more block-based themes are also being introduced.
So, what does the development of block-based themes mean for those of us who are deeply entrenched in the “classic” way of building WordPress themes? That’s what I want to look at in this section.
The file structure of block themes
In classic PHP-powered theming, markup elements are generated with PHP and JavaScript, while in block themes those templates are entirely composed of HTML blocks and structural CSS provided by the block editor. This might sound scary for lots of folks, but it’s easy to imagine just how liberating it is for others as it lowers the bar when it comes to developing a WordPress theme.
The structure of a block theme is drastically different from the classic WordPress Template Hierarchy that we all are used to. In classic PHP-based themes, page element markup has to be generated with PHP and JavaScript, whereas in block themes, the WordPress Core provides both the markup and basic styling. For example, the default Twenty Twenty-One theme contains 48 PHP files and 11 JavaScript files weighing in at 4.5 MB. Its block-based sibling, the experimental TT1 Blocks theme, contains only four PHP files, one JavaScript file, and eight HTML files at 3.5 MB.
A block theme structure can be very simple with just a few required files : index.php
, style.css
and template/index.html
. The following is a typical block theme file structure, pulled from the WordPress Editor Handbook:
#! basic block-theme structure
theme
|__ style.css
|__ functions.php
|__ index.php
|__ theme.json
|__ templates
|__ index.html
|__ single.html
|__ archive.html
|__ ...
|__ parts
|__ header.html
|__ footer.html
|__ sidebar.html
|__ ...
styles.css
: Contains theme’s style sheetfunctions.php
: Contains theme setup and may include additional files, enable an editor style sheet, and enqueuestyle.css
, if there are anyindex.php
: An empty file to switch to default file in case the block theme is activated without the WordPress Block Editor.theme.json
: Optional configuration file used to enable or disable features and set default styles for both the website and blockstemplates
: Contains page templates that are composed of blocks. These files follow the same template hierarchy as traditional themes.index.html
: The primary template to generate a post or page, analogous toindex.php
in classic themessingle.html
: The template to generate single posts or pagesarchive.html
: The template to generate archive lists of posts
parts
: The common collections of blocks to be used in block templatesheader.html
: The global header blockfooter.html
: The global footer blocksidebar.html
: An optional global sidebar block
A list of theme blocks including that are specific to block themes is available in WordPress Block Editor Handbook.
Templates and template parts
Templates are basically group of assembled blocks that might include reusable block parts, like a site header or footer. Different blocks are used to compose a page template. For example, that might be a list of blog posts, a list of products, or even a widget.
Here’s an example of a block template pulled from the WordPress Block Editor Handbook.
<!-- wp:site-title /-->
<!-- wp:image {"sizeSlug":"large"} -->
<figure class="wp-block-image size-large">
<img src="https://cldup.com/0BNcqkoMdq.jpg" alt="" />
</figure>
<!-- /wp:image -->
<!-- wp:group -->
<div class="wp-block-group">
<!-- wp:post-title /-->
<!-- wp:post-content /-->
</div>
<!-- /wp:group -->
<!-- wp:group -->
<div class="wp-block-group">
<!-- wp:heading -->
<h2>Footer</h2>
<!-- /wp:heading -->
</div>
<!-- /wp:group -->
Creating WordPress Block Themes
The WordPress Site Editor is now the primary tool for defining the look and feel of a WordPress website. You may be used to using the WordPress Customizer to do these things — and some themes have heavily tapped into that to do what the site editor is now designed to do.
So, no longer is the block editor for pages and posts; it’s the way WordPress themes are created.
I’m assuming that many of you have already used the block editor, and don’t really need a deep lesson on what it is or how to use it. That said, it’s worth poking at it a bit since it’s the impetus for everything related to WordPress theming moving forward, now that WordPress 5.9 is in the wild.
In fact, when we talk about block editing and theming, yes, we’re talking about the block editor. But really what we’re talking about is the WordPress Site Editor.
The WordPress Site Editor interface
Even as an early adopter of the Gutenberg plugin, I find the experience of the site editor intimidating and frustrating. It changes frequently and often drastically with each new release. I am hopeful, though, that WordPress 5.9 is a sort of line in the sand that helps stabilize that rocky feeling.
The site editor is accessed the same way you’re already used to accessing the WordPress Customizer. It’s located under Appearance in the dashboard menu, called Editor.
Let’s briefly walk-through the new Editor interface.
First, navigate to the site editor by clicking Appearance → Editor from the WordPress admin menu. That menu item may have a red “beta” label on it, like it currently does in WordPress 5.9.
That takes you to the site editor, which displays either your homepage or post archive, depending on what you have your homepage set to in Settings → Reading. From there it sort of looks like the fullscreen version of the block editor when creating or editing a page or post. But click on the WordPress logo in the top-left of the screen, and a left panel opens up revealing the WordPress Site Editor and its menu to navigate between different parts of the site. This includes Site, Templates, and Template Parts.
Let’s click into Templates. This shows us a list of the available templates provided by the theme, complete with a description of each one and where it is registered (e.g. the parent or a child theme).
The other way to get to this screen is from the initial page we landed on when entering the site editor. Click the name of the template in the top admin bar to reveal a button that takes you directly to the same Templates screen.
Any of templates can be edited just like any page or post in the block editor. Let’s say I don’t like to have a featured image on my index page and want to remove it. Simply delete the featured image block and save the template.
The other key part of the site editor UI is a list view that outlines the current blocks that are placed in the template. This has been a feature in WordPress since the introduction of the block editor, but what’s new this time around is that you can open and close parent blocks that contain child blocks like an accordion. Not only that, but it supports dragging and dropping blocks to change the layout directly from there.
One more thing in the site editor UI: you can clear out customizations with the click of a button. From the Templates screen, click the kebob menu next to a template and select the option to Clear customizations. This is a nice way to reset and start from scratch, should you need to.
The WordPress Core team publishes regular updates on what’s new at Make WordPress Core. It’s worth bookmarking that to stay posted on the latest changes to the WordPress Block Editor and Site Editor.
Creating Templates and Template Parts
Templates, as you know, are core to WordPress theming. They enforce consistent and reusable layouts. That doesn’t change in WordPress 5.9. And neither does the fact that we can create template parts that are like module pieces that can be used in multiple template, say a post query that lives in an archive template and the home template.
What’s different in WordPress 5.9 is that they are created and managed with the site editor rather than PHP files that live in the theme folder.
The Block Editor Handbook lists three ways to create templates and template parts: (a) manually, by creating HTML files containing block markup, (b) using the site editor, and (c) using the template editing mode in the block editor.
Brief descriptions of creating template in the site editor and template editing mode are available in the Block Theme handbook. The WordPress 5.9 allows to create a new template using editor mode.
The customized templates can then be exported to include in a block theme. So, yeah, we now have the ability to create a fully functioning WordPress theme without writing a line of code! The exported folder currently does not contain theme.json
file, however there is a proposal over at GitHub to allow exporting both block themes and styles.
But for those who prefer working more closely with code, then manually creating WordPress templates and template parts is still a thing. You can still crack open a code editor and create HTML files containing block markup.
Global settings and styles (theme.json
)
In classic themes, we write the styling rules in a style.css
file. In block themes, styling is more challenging because CSS comes from different sources (e.g. core blocks, themes, and users). WordPress 5.8 introduced a concept of Global Styles — which is essentially a theme.json
file — that, according to the docs, consolidate “the various APIs related to styles into a single point – a theme.json
file that should be located inside the root of the theme directory.“
The theme.json
file is said to have been designed to offer more granular styling structure for theme authors with options to manage and customize the CSS styles coming from various origins. For example, a theme author may set certain styling features that are hidden from users, define default colors, font sizes and other features available to the user, and may set the default layout of the editor as well. Plus, theme.json
allows you to customize styling on a per-block basis. It’s powerful, flexible, and super maintainable!
The block editor is expected to provide all the basic styling that theme authors are allowed to customize style, as defined by the theme.json
file. However, the theme.json
file could get quite long for a complex theme, and currently there is no way to partition it in a more digestible way. There is a GitHub ticket to restructure it so that different theme.json
files map to theme hierarchy to /styles
folder. That would be a nice enhancement for developer experience.
The default Twenty Twenty-Two theme is a good example of how WordPress full-site editing features use theme.json
for global settings and styling blocks.
WordPress Block Theme approaches
Maybe you’ve always made WordPress themes from scratch. Perhaps you’ve relied on the Underscores theme as a starting point. Or maybe you have a favorite theme you extend with a child theme. The new features of the WordPress Site Editor really change the way we make themes.
Following are a few emerging strategies for block-based theme development that are deeply integrated with the WordPress Site Editor.
Universal themes
The Automattic team has built a Blockbase universal theme that’s dubbed as a new way to build themes, sort of similar to the Underscoresstarter theme. The Blockbase theme provides temporary “ponyfill” styles that the block editor “does not yet take into account on theme.json
‘custom’ properties” and that may eventually become obsolete once the Gutenberg plugin fully matures and is integrated into WordPress Core.
Using the universal parent theme approach, the Automattic has already released eight Blockbase child themes, and several others are in progress over at GitHub.
Twenty Twenty-Two default theme
The Twenty Twenty-Two default theme is another excellent starting point, as it’s really the first WordPress theme that ships with WordPress that is designed to work with the site editor.
In my opinion, this theme is excellent for theme developers who are already familiar with FSE features to showcase what is possible. For others users who are not developers and are not familiar with FSE features, customizations it in the block editor, then exporting it as a child theme could be painfully frustrating and overwhelming.
Hybrid themes
The concept of “Hybrid” themes in the context of FSE is discussed in this GitHub ticket. The idea is to provide paths for any user to use the site or template editor to override traditional theme templates.
Justin Tadlock in this WP Tavern post predicts four types of themes — block only, universal, hybrid, and classic — and speculates that theme authors may split between “block themes and a mashup of classic/hybrid themes.”
Proof in the pudding is provided by Frank Klein in “What I Learned Building a Hybrid Theme”:
A hybrid theme mixes the traditional theming approach with full-site editing features. A key component here is the
theme.json
file. It offers more control over the block editor’s settings, and simplifies styling blocks. A hybrid theme can use block templates as well, but that’s optional.
Frank is the author of the Block-Based Bosco theme and has expanded further on what a “hybrid theme” is by creating a hybrid version of the default Twenty Twenty theme. The theme is available on GitHub. Currently, there are no hybrid themes in the WordPres Theme Directory.
WordPress community themes
At the time of writing, there are 47 block-based themes with FSE features available in the theme directory. As expected, this approach is widely varied.
For example, in this post, Aino block theme author Ellen Bower discusses how they converted their classic theme into a block theme, detailing what makes a theme a “block” theme. The file structure of this approach looks different from the standard block theme structure we covered earlier.
Another popular block theme, Tove by Andars Noren, is described as a flexible base theme that follows the standard block theme file structure.
There’s also a very simple single page proof of the concept theme by Carolina Nymark that contains nothing but a single index.html
called Miniblock OOAK. It’s already available in the theme directory, as is another one from Justin Tadlock that’s a work in progress (and he wrote up his process in a separate article).
Block Theme Generator app
Even though we’ve already established how friendly WordPress Block Themes are for non-developers, there are tools that help create complete block themes or merely a customized theme.json
file.
David Gwyer, an Automattic engineer, has been working on a Block theme generator app which, at the time of writing, is in beta and available for testing by request.
In my brief testing, the app only allowed me to generate customized theme.json
file. But Gwyer told to WP Tavern that the app isn’t fully baked just yet, but features are being added often. Once complete, this could be a very helpful resource for theme authors to create customized block themes.
Block themes that are currently in use
This Twitter thread from Carolina Nymark shows some examples of block themes that are live and in production at the time of this writing. In a recent Yoast article, Carolina listed a bunch of personal and business websites that use block themes.
Personal sites
Business sites
As I mentioned earlier, I also have been using a block theme for one of my personal websites for a while. The default Twenty Twenty-Two theme also currently shows more than 60,000 active installs, which tells me there are many more examples of block-based theme implementations in the wild.
Building Block Child Themes
Child theming is still a thing in this new era of WordPress blocks, though something that’s still in early days. In other words, there is no clear approach to do make a block-based child theme, and there are no existing tools to help at the moment.
That said, a few approaches for creating WordPress child block themes are emerging.
Create Blockbase Theme plugin
The Automattic team is working on a plugin called Create Blockbase Theme. This will make it fairly trivial to create child themes based on the Blockbase universal theme we talked about earlier. Ben Dwyer has discussed how theme authors can build Blockbase child themes with simple six steps and without writing a line of code.
I tested the plugin in my own local environment, making only small changes to my Blockbase theme install, and everything appeared to work. Just note that the plugin is still experimental and under development, though you can follow the roadmap to see what’s up.
Using an alternate theme.json
file
Kjell Reigstad, author of the default WordPress Twenty Twenty-Two theme, demonstrates how swapping a single theme.json
file with another theme.json
file that contains different style configurations can change the look and feel of a block-based theme design.
Last week I created a quick demo of how the visual aesthetic of Twenty Twenty-Two can be drastically changed through its theme.json settings. This example swaps the default json file for one with different font, color, duotone, and spacing values. pic.twitter.com/ab9tyGwLOS
— kjellr (@kjellr) October 22, 2021
Kjell has opened a pull request that shows off several experimental child themes that are available for testing at the GitHub theme-experiment GitHub repository.
Along these same lines, Ryan Welcher is in the process of developing a theme.json
builder tool that will generate a customized theme.json
file to facilitate non-coders to create similar child themes. More can be found in this WP Tavern post.
The Framboise child theme (available in theme directory) is an early example of that approach which includes only a single theme.json
file.
Is there even a need for child themes?
Rich Tabor asks the question:
If a theme consist of JSON and block templates that can both be modified via Global Styles, then what are child themes for?
— Rich Tabor (@richard_tabor) October 25, 2021
Indeed, a single theme.json
file could serve as a child theme on its own. There is an ongoing discussion about allowing theme authors to ship multiple theme.json
files with block themes that offer multiple global style variations. This way, a WordPress user could pick one of the variations to use on the site.
Some features of global style variations are already included in Gutenberg v12. 5 and expected to be available with WordPress 6.0.
Some personal thoughts
I’d be remiss to end this without weighing in on all this from a personal level. I’ll do this briefly in a few points.
Block themes are a WordPress answer to Jamstack criticisms
Jamstack enthusiasts have lobbed criticisms at the WordPress platform, most notably that WordPress themes are bloated with PHP files. Well, that’s no longer the case with WordPress Block Themes.
We saw earlier how an entire theme can be a single index.html
file and a theme.json
file. No bloat there. And nothing but markup.
I miss the WordPress Customizer
Especially the ability to inject custom code. From here on out, it’s going to require a deep level of familiarity with the WordPress Site Editor UI to accomplish the same thing.
Customizations a site is easy-peasy.
Customizing a classic theme — even something as minimal as changing fonts — can be difficult if you don’t know what you’re doing. That’s changed now with the site editor and the introduction of the theme.json
file, where a theme can be customized (and even exported!) without writing a single line of code.
I still hold my opinion, though that the site editor interface is confusing. I think a pleasant user experience is a far ways off but looking forward to the next WordPress 6.0 release for better user experience.
Barriers to designing themes is getting lower.
It’s less about PHP and template files, and more about developing patterns and creating content. That sounds exactly what a content management system should be designed to do! I am already excited with new features being considered for the WordPress 6.0 release.
Resources
There is already a ton of other articles that cover WordPress Block Themes, full-site editing, and the block editor. And many of those came before WordPress 5.9 was released!
So, in addition to this article, here’s a collection of others for you to consider as you begin or continue down your journey of WordPress blocks and site editing.
WordPress 5.9
- Introducing WordPress 5.9 (official release video)
- Exploring WordPress 5.9 (video by Ann McCarthy)
- Exploring Navigation Block (video by Ann McCarthy)
- Introducing Twenty Twenty-Two (Kjell Reigstad)
- How 5.9 creates a strong foundation for the future (Gutenberg Times)
- What is full site editing (FSE) in WordPress? (Yoast)
Site editor and block themes
- WordPress Block Editor Handbook
- WordPress Pattern Directory
- WordPress Theme Experiments (GitHub)
- WordPress Gutenberg Blocks Basics (video by WP Apprentice)
- Introduction to Block-based themes (video, Kjell Reigstad)
- Simple Site Design with Full Site Editing (Learn WordPress)
- How to use PHP templates in block themes (Carolina Nymark)
Selected blog posts
- A New Era for WordPress Themes (Anders Noren)
- Gutenberg Full Site Editing and Block-Based Themes (The Publishing Project)
- So you want to make block patterns? (WordPress.org news)
- The theme.json horizon (Matia Ventura)
- Switching to a block-based theme (Kelly Ryelle)
Other useful links
- WP Tavern: The site covers block themes, Gutenberg releases and plugins helping readers to learn what is new on World Press.
- Gutenberg Times: The site covers important Gutenberg news and links to related to block editor, full site editing, every week.
- Make WordPress Themes: Published meeting notes on themes and Gutenberg + Theme series.
- Make WordPress Core: Publishes new content following every Gutenberg release on a bi-weekly basis.
As expected in beta testing, the site editor is still intimating and confusing, nevertheless, I am finding it a fun to work with block themes. Indeed, I have been already modifying Twenty Twenty-Two as a child theme and plan to create style alternatives using single theme.json
file.
Have you been using block themes in your project, if so, share your experience and thoughts; I love reading any comments and feedback!
A Deep Introduction to WordPress Block Themes originally published on CSS-Tricks. You should get the newsletter and become a supporter.