WordPress 5.9 offered a brand new technique to construct web sites: Complete Web site Modifying. It was once a turning level for WordPress customers as it utterly modified the way in which WordPress subject matters are constructed and paintings.
The advent of FSE additionally offered a difference between subject matters that totally beef up the brand new site-building options, often referred to as Block Topics, and the normal PHP-based subject matters, which we now name Vintage Topics.
Through the years, many options constructed for Block Topics were prolonged to Vintage Topics. This has led to a 3rd class of subject matters, Hybrid Topics, which might be nonetheless constructed with the good judgment and construction of Vintage Topics however with beef up for more than a few options designed for Block Topics.
This text explores Hybrid Topics, their key options, how builders can make stronger them, and when to make a choice them over Block Topics.
Let’s dive in!

Vintage or Hybrid Topics?
Earlier than the advent of Block Topics with Twenty Twenty-Two and WordPress 5.9, there have been no things like Vintage Topics. The time period happened to tell apart them from Block Topics. Vintage Topics are all WordPress subject matters with out beef up for block options.

Lately, it isn’t simple to seek out natural Vintage Topics as a result of, since 5.9, those subject matters were enhanced with many options constructed for Block Topics, making the modifying and design reviews of the 2 classes of subject matters nearer and nearer over the years.
That being stated, the way in which you’re employed with Hybrid Topics remains to be other from Block Topics.
Fundamental options of Hybrid Topics
With Hybrid Topics, your website can make the most of the modifying functions of the WordPress block editor whilst final suitable with conventional WordPress plugins and contours equivalent to widgets, menus, and web page templates.
The WordPress Customizer
Hybrid Topics usually beef up the WordPress Customizer, a visible configuration setting that allows you to fine-tune the illusion of your WordPress website online and preview your adjustments in real-time.
The Twenty Twenty-One default theme is a great instance of a hybrid theme offering the most typical Customizer settings, together with Web site Id, Colours & Darkish Mode, Background Symbol, Menus, Widgets, Homepage Settings, and extra.

Topics can check in particular Customizer controls, so capability varies by way of theme. The next picture displays the Customizer for Neve, a light-weight hybrid theme from ThemeIsle.

Topics too can check in complicated options to offer customers granular regulate over particular facets of website design. Neve, for instance, supplies an impressive builder for growing website headers and footers.

Block widgets
Hybrid Topics help you customise Widget Spaces the usage of blocks, because of the block-based widgets editor. It was once first offered with WordPress 5.8, and you’ll take a look at it with any Vintage Theme the usage of widgets.

The Widget Editor interface is very similar to the Put up Editor interface. The next picture displays an Symbol block within the Footer widget house of the Twenty Twenty-One theme.

Vintage widgets equivalent to Classes, Archives, Contemporary Posts, or Contemporary Feedback are nonetheless supported in Hybrid Topics. The Widget Editor enhances the vintage WordPress widgets by way of permitting customers to create their very own via its block-based interface.
Taste e-book and block patterns
With the new adjustments offered with WordPress 6.8, Hybrid Topics that beef up editor kinds can use the Taste Ebook, a visible interface that permits customers to preview any block that can be utilized on their web sites with no need to make use of the ones blocks of their content material.
You’ll be able to get entry to the Taste Ebook in Hybrid Topics from Look > Design > Kinds.
The next picture displays the Taste Ebook for the Kadence hybrid theme.

In the similar interface, you’ll browse and organize Patterns.

For Hybrid Topics that beef up them, patterns are to be had to be used within the Put up Editor, which is enabled by way of default on all WordPress installations since 5.0, except you will have disabled it with the Vintage Editor plugin.

Theme construction: A developer’s evaluate
Vintage and Block Topics don’t seem to be most effective other with regards to capability for the general person. They’re additionally other from a structural perspective.
Vintage Topics
Vintage Topics depend on a couple of key information, a very powerful of which is the genre.css
report. It supplies the theme’s metadata and determines the website’s look at the entrance finish.
Along with the theme genre sheet, Vintage Topics usually have a purposes.php
report used to construct the theme’s capability and beef up.
Vintage Topics additionally depend on PHP templates that outline the construction of a web page and its primary spaces: header, frame, sidebars, and footer. When a person visits a put up or web page, WordPress determines which template to make use of to render the content material at the display in line with a strict device of laws referred to as the template hierarchy. Maximum usually used templates come with index.php
, web page.php
, unmarried.php
, and lots of others.
Vintage Topics would possibly use particular PHP purposes (motion and clear out hooks), which can be completed at particular moments within the lifetime of WordPress, enabling builders to increase a theme’s capability the usage of PHP code within the purposes.php
report of a kid theme.
You could wager that customizing a vintage theme is especially onerous for customers with out coding talents.
Block Topics
Block Topics additionally desire a genre.css
to supply WordPress with the theme metadata, however they strongly depend on a theme.json
report, a configuration report that defines world kinds and settings for a theme. It accommodates a JSON object whose homes outline the preliminary settings had to create the structure and outline the look of the website’s pages.
Block Topics additionally use templates and template components, however those are structurally other from vintage theme PHP templates. In Block Topics, templates and template components are HTML information containing particular markup and JSON gadgets. For instance, imagine the house.html
template of the Twenty Twenty-5 default theme:
This template is composed of structured components within the type of HTML tags and feedback. Feedback would possibly confer with different standard components of a block theme, equivalent to template components and patterns, which can be composed of blocks or different nested components.
Including block options to Hybrid Topics
As we discussed above, with Vintage Topics, you want so as to add tradition code to change a website’s structure or capability, frequently involving template information or purposes.php
. By contrast, Block Topics empower non-developers with better regulate over website structure and look.
Hybrid Topics be offering fewer block options than Block Topics however would possibly nonetheless supply enhanced structure and elegance regulate via patterns and world kinds.
Let’s discover some robust block options you’ll combine into your vintage theme and learn to enforce them successfully.
International Kinds
WordPress 5.8 offered International Kinds, a visible interface that permits customers to regulate the appear and feel in their website online from a centralized interface, and builders to regulate the kinds in their WordPress web sites via a theme.json
report.
To allow this option for your hybrid theme, merely upload a theme.json
report to the theme’s root folder. Let’s take a look at probably the most key options that you’ll upload on your hybrid theme with theme.json
.
Typography
Let’s say you need so as to add beef up for 3 font households on your vintage theme. On this instance, we can use Twenty Twenty-One.
First, create a fonts
folder beneath property
and add some fonts of your selection. We’re including 3 fonts: Manrope
, Fira Code
, and Beiruti
. You’ll be able to get those fonts from the Twenty Twenty-5 theme.

Open your textual content editor and create the next theme.json
:
{
"$schema": "https://schemas.wp.org/trunk/theme.json",
"model": 3,
"settings": {
"structure": {
"contentSize": "768px",
"wideSize": "1024px"
},
"typography": {
"fontFamilies": [
{
"name": "Manrope",
"slug": "manrope",
"fontFamily": "Manrope, sans-serif",
"fontFace": [
{
"src": [
"file:./assets/fonts/manrope/Manrope-VariableFont_wght.woff2"
],
"fontWeight": "200 800",
"fontStyle": "commonplace",
"fontFamily": "Manrope"
}
]
},
{
"title": "Fira Code",
"slug": "fira-code",
"fontFamily": ""Fira Code", monospace",
"fontFace": [
{
"src": [
"file:./assets/fonts/fira-code/FiraCode-VariableFont_wght.woff2"
],
"fontWeight": "300 700",
"fontStyle": "commonplace",
"fontFamily": ""Fira Code""
}
]
},
{
"title": "Beiruti",
"slug": "beiruti",
"fontFamily": "Beiruti, sans-serif",
"fontFace": [
{
"src": [
"file:./assets/fonts/beiruti/Beiruti-VariableFont_wght.woff2"
],
"fontWeight": "300 700",
"fontStyle": "commonplace",
"fontFamily": "Beiruti"
}
]
}
]
}
}
}
The settings.typography.fontFamilies
belongings means that you can check in any collection of tradition font households. For each and every font, you’ll wish to claim the next homes:
title
: A required human-readable name for the font kin.slug
: A required slug for the font kin. It’ll be appended to a generated CSS tradition belongings:--wp--preset--font-family--{slug}
.fontFamily
: A required price that can map to the CSS font-family price.fontFace
: An not obligatory array of font faces which might be mapped to the@font-face
CSS at-rule. You most effective want this with tradition internet fonts.
Save your theme.json
and navigate on your WordPress dashboard. Create a brand new put up or web page, upload a paragraph with a pattern textual content, and open the block sidebar. Click on at the Typography Choices button and make a selection Font. You will have to in finding choices for the font households you will have simply added on your theme.
The next pictures display what the sidebar of the Paragraph block seems like ahead of and after including the theme.json
proven above.


International genre homes range by way of theme. With the exception oftypography
, usually supported homes help you regulate coloration palette, structure, and tradition kinds. The next examples were examined on Twenty Twenty-One.
Colour palette, gradients, and duotone filters
You’ll be able to upload beef up for tradition colours the usage of the settings.coloration
belongings on the theme or person block stage. For instance, the next code provides two colours to the default palette:
settings: {
"coloration": {
"palette": [
{
"name": "Dark blue",
"slug": "dark-blue",
"color": "#1e73be"
},
{
"name": "Bright green",
"slug": "bright-green",
"color": "#81d742"
}
]
},
}
You’ll be able to use the settings.coloration.palette
belongings to check in as many colours as you need.

You’ll be able to additionally upload beef up for gradients and duotone filters:
settings: {
"coloration": {
"gradients": [
{
"gradient": "linear-gradient(135deg, #0073e6, #8fceff)",
"name": "Clear Sky",
"slug": "clear-sky"
},
{
"gradient": "linear-gradient(to right top, #ff8c00, #ff0080)",
"name": "Vivid Sunset",
"slug": "vivid-sunset"
}
]
}
}

settings: {
"coloration": {
"duotone": [
{
"colors": [ "#0A2F51", "#F5D04E" ],
"title": "Deep Sea Gold",
"slug": "deep-sea-gold"
},
{
"colours": [ "#3A0CA3", "#FFB703" ],
"title": "Red Amber",
"slug": "purple-amber"
},
{
"colours": [ "#1B4332", "#BAE6C4" ],
"title": "Woodland Mist",
"slug": "forest-mist"
},
{
"colours": [ "#000000", "#FFFFFF" ],
"title": "Black and White",
"slug": "black-and-white"
}
]
}
}

Format
You’ll be able to additionally customise the default structure settings. The settings.structure
belongings means that you can set the default content material width and extensive alignment width. This is an instance:
"settings": {
"structure": {
"contentSize": "768px",
"wideSize": "1024px"
}
}
For a closer evaluate oftheme.json
, take a look at our complete educational on theme.json
and the authentic WordPress documentation.
Block genre versions
First offered with WordPress 5.3, block genre versions permit builders to create choice kinds for particular blocks.
In brief, block kinds are CSS categories added to the wrapper component of a block within the shape .is-style-{title}
.
Block genre versions seem within the Kinds panel of the block sidebar and make allowance you to make a choice a mode for the block with a unmarried click on.

You’ll be able to check in your block genre versions in different tactics.
First, you’ll check in block kinds the usage of the PHP register_block_style()
serve as. For instance, it’s worthwhile to check in the next genre variation for your theme’s purposes report:
if ( function_exists( 'register_custom_block_style' ) ) {
register_block_style(
'core/picture',
array(
'title' => 'tradition',
'label' => __( 'Customized', 'text-domain' ),
'inline_style' => '.wp-block-image.is-style-custom img { border-radius: 12px; }',
)
);
}
add_action( 'init', 'register_custom_block_style' );
register_block_style()
accepts two arguments:
$block_name
: The title of a block sort or an array of block sorts$style_properties
: An array containing the way homes. On this instance, we usedtitle
,label
, andinline_style
.
The code above generates a block genre variation with a unmarried CSS belongings. As soon as this code is added to the purposes.php
report of your theme or kid theme, a button shows within the block kinds panel to permit the person to set the way with a unmarried click on.

The next picture displays the block genre variation within the entrance finish. The theme remains to be Twenty Twenty-One.

You’ll be able to upload your inline kinds for your PHP code, as within the above instance, however your code can temporarily develop into tricky to handle as kinds develop into extra complicated and elaborate. In those circumstances, you’ll check in the way variation as we noticed previous however outline the kinds for your theme.json
report.
Within the following instance, we create a Darkish blue genre variation for the Heading block.
First, check in the way variation within the theme’s purposes report:
add_action('init', 'register_block_style_labels');
serve as register_block_style_labels() {
$block_types = ['core/heading'];
if (function_exists('register_block_style')) {
foreach ($block_types as $block_type) {
register_block_style(
$block_type,
array(
'title' => 'dark-blue-bg',
'label' => __('Darkish Blue', 'twentytwentyone')
)
);
}
}
}
Subsequent, outline the difference kinds for your theme.json
report:
"settings": {
"kinds": {
"blocks": {
"core/heading": {
"versions": {
"dark-blue-bg": {
"coloration": {
"background": "#2860a6",
"textual content": "#ffffff"
},
"spacing": {
"padding": {
"best": "0.3em",
"proper": "0.4em",
"backside": "0.3em",
"left": "0.4em"
}
}
}
}
}
}
}
}
Now, your theme customers can choose from two genre versions for the Heading block, as proven within the following picture.

Block versions
Block versions are change variations of any registered block. Whilst block genre versions (or block kinds) are custom designed variations of a block genre that customers can upload to content material with a unmarried click on, block versions are change variations of a block’s settings. Those permit customers to temporarily insert a block with pre-configured settings with no need to set the similar configurations for each and every block example.
The Block Permutations API lets in Hybrid Topics to check in block versions by the use of JavaScript. In the most simple circumstances, making a script and enqueuing it’s going to do the trick, however in case you paintings so much with JavaScript and Gutenberg blocks, you could need to incorporate construct equipment into your workflow. (Advised studying.)
Think you need to create a block variation with a collection of pre-configured choices in order that your variation can also be inserted temporarily into your posts or pages with minimum further configuration required.
Step one is to create an empty JavaScript report and cargo it into the editor. It is important to enqueue it for your theme’s purposes.php
report the usage of wp_enqueue_script()
and the enqueue_block_editor_assets
motion hook.
add_action( 'enqueue_block_editor_assets', serve as () {
wp_enqueue_script(
'my-block-variations',
get_theme_file_uri( 'property/js/block-variations.js' ) . '?cache_bust=' . time(),
array(
'wp-blocks',
'wp-dom-ready',
'wp-i18n',
'wp-edit-post'
),
wp_get_theme()->get( 'Model' ),
true
);
} );
Within the code above, we used ?cache_bust=' . time()
so as to add a novel timestamp to the URL of block-variations.js
(e.g., block-variations.js?cache_bust=1698765432
). That is specifically helpful all through building, because it guarantees that the browser, server, or CDN all the time rather a lot the most recent model of the script, combating an old-fashioned cached model from blocking off the show of adjustments.
Subsequent, you want to check in your block variation for your script the usage of the registerBlockVariation
serve as equipped by way of the Block Permutations API.
This is the serve as signature:
const registerBlockVariation = ( blockName, variation )
blockName
: The title of the block (i.e.,core/question
.)variation
: An object describing a variation for the block sort.
The variation
object can come with any of the next parameters:
title
: (string) A singular identifier of the difference.name
: (string) A human-readable variation name.description
: (string) An in depth description.class
: (string) A class utilized in seek interfaces.key phrases
: (Array) An array of phrases that assist customers uncover the difference.icon
: (WPIcon) An icon to show within the block inserter.isDefault
: (boolean) Whether or not the present variation is the default one. Defaults to false.isActive
: (Serve as/Array) A serve as or an array of block attributes used to decide if the difference is energetic when the block is chosen. With outisActive
, WordPress would no longer know the way to tell apart your variation from a normal block or different versions, inflicting inconsistent conduct within the editor.attributes
: (Object) Characteristic values that override block defaults.innerBlocks
: (Array[]) Preliminary configuration of nested block.instance
: (Object) Structured knowledge for the block preview. Set to undefined to disable the preview.scope
: (WPBlockVariationScope[]) The listing of scopes the place the difference is appropriate. When no longer equipped, it assumes all to be had scopes. To be had choices areblock
,inserter
, andbecome
. It defaults toblock
andinserter
.
Now you’ll upload the JavaScript to the block-variations.js
report:
wp.blocks.registerBlockVariation( 'core/heading', {
title: 'custom-centered-text',
name: 'Customized Focused Textual content',
description: 'This can be a block variation with tradition attributes.',
attributes: {
stage: 2,
textAlign: 'middle',
placeholder: 'Upload your textual content right here',
genre: {
coloration: {
textual content: '#1e73be',
background: '#81d742'
}
}
},
isActive: ( blockAttributes ) => {
go back (
blockAttributes.stage === 2 &&
blockAttributes.textAlign === 'middle' &&
blockAttributes.genre?.coloration?.textual content === '#1e73be' &&
blockAttributes.genre?.coloration?.background === '#81d742'
);
},
icon: 'plane',
scope: [ 'inserter' ]
} );
This code provides a brand new block sort with an plane icon to the block inserter. Whilst you click on at the plane, a brand new Heading block variation will get added to the web page together with your tradition settings. We set the header stage (H2
), focused the textual content, set a placeholder, and outlined the header’s textual content and background colours.

Word: For this code to paintings as anticipated, be sure that your hybrid theme provides beef up for editor options equivalent to 'editor-color-palette'
, editor-styles
, and others. For a extra complete listing of helps, take a look at the Block Permutations API.
Block patterns
Block patterns are prebuilt teams of blocks you’ll upload on your content material and customise the usage of the block editor’s interface.
Block Topics normally supply a variable collection of block patterns you’ll upload on your content material at once from the block inserter. Hybrid Topics can upload beef up for patterns in order that vintage theme customers can get pleasure from this robust characteristic.
You’ll be able to create a patterns
folder for your theme’s root and come with your block patterns, or you’ll check in them for your theme’s purposes.php
or different .php
information.
To stay issues so as, you’ll create a report inc/block-patterns.php
and come with it for your theme’s serve as.php
with the next code:
require get_template_directory() . '/inc/block-patterns.php';
As soon as achieved, you’ll construct your trend within the editor, replica the code, and check in your trend and trend class in inc/block-patterns.php
the usage of register_block_pattern_category
and register_block_pattern()
purposes:
if ( function_exists( 'register_block_pattern_category' ) ) {
serve as my_hybrid_theme_register_block_pattern_category() {
register_block_pattern_category(
'myhybridtheme',
array( 'label' => esc_html__( 'My Hybrid Theme', 'myhybridtheme' ) )
);
}
add_action( 'init', 'my_hybrid_theme_register_block_pattern_category' );
}
if ( function_exists( 'register_block_pattern' ) ) {
serve as my_hybrid_theme_register_block_pattern() {
// My trend
register_block_pattern(
'myhybridtheme/huge-heading',
array(
'name' => esc_html__( 'Large heading', 'myhybridtheme' ),
'classes' => array( 'myhybridtheme' ),
'viewportWidth' => 1440,
'blockTypes' => array( 'core/heading' ),
'content material' => '' . esc_html__( 'A easy Heading in a trend', 'myhybridtheme' ) . '
',
)
);
}
add_action( 'init', 'my_hybrid_theme_register_block_pattern' );
}
You’ll be able to preview your trend for your WordPress dashboard beneath Look > Design > Patterns > My Hybrid Theme and use it for your content material.

You’ll be able to additionally replica and export your trend and import it into different WordPress web sites.

Template components
Even if Hybrid Topics makes use of the vintage PHP templates and template components, you’ll upload beef up for block template components for your theme’s purposes.php
report:
serve as my_hybrid_theme_setup() {
add_theme_support( 'block-template-parts' );
}
add_action( 'after_setup_theme', 'my_hybrid_theme_setup' );
Upon getting added beef up for template components, you’ll come with any template phase in any template report of your hybrid theme the usage of the block_template_part
serve as.
Let’s take a look at a realistic instance. Get started by way of making a /components
folder for your theme’s root and importing a footer.html
report into it. For this case, we copied the footer from the Twenty Twenty-5 theme:
Now you’ll come with this template phase in a vintage template with the block_template_part
serve as:
You’ll be able to, for instance, come with it within the footer.php
report of Twenty Twenty-One. The next picture displays the outcome at the display.

You’ll be able to additionally come with template components right into a block template the usage of the next code:
You’ll be able to, for instance, replica the code of the web page.html
template from Twenty Twenty-5:
Save this template for your /templates
folder and phone it web page.html
. WordPress will routinely load it in line with the template hierarchy. This template will routinely come with header.html
and footer.html
template components out of your hybrid theme’s /components
folder.
When to make a choice Hybrid Topics over Block Topics
A Hybrid theme is also the most suitable choice within the following situations:
- When you need to make use of some leading-edge options of Block Topics with out utterly restructuring an current website.
Hybrid Topics help you make the most of block options such because the block editor, world kinds, and block patterns. Hybrid Topics additionally beef up block editor APIs such because the Block Bindings API, Interactivity API, and HTML API. Because of this you’ll create leading-edge web sites with no need to head via a fancy migration. - When you need to handle compatibility with vintage plugins or widgets however don’t need to surrender some robust options of Block Topics.
Older variations of a few plugins could have compatibility problems with Block Topics, equivalent to older variations of Touch Shape 7, NextGEN Gallery, Customized Put up Sort UI, and different plugins. Even if it is suggested to replace plugins to the most recent variations to forestall safety vulnerabilities, some WordPress websites could have older variations of a plugin put in. Should you don’t seem to be but waiting to improve all of your plugins, it’s possible you’ll imagine putting in a hybrid theme. - Whilst you are looking for the most efficient compromise between design and function.
Some well-liked Hybrid Topics are optimized for pace and can give a lot better efficiency than Block Topics. But they beef up the no-code/low-code method of Block Topics offering a greater design revel in than Vintage Topics. Efficiency-optimized Hybrid Topics equivalent to Neve or Kadence help you create modern-looking web sites with out compromising efficiency. - When you need a clean transition to FSE.
Once in a while, the transition from the previous to the brand new design good judgment can take time, particularly when operating in groups on massive websites, and the educational curve is a priority. A hybrid theme lets in your workforce to experiment with block capability whilst keeping up acquainted design equipment such because the Customizer and vintage PHP templates.
On the other hand, there also are situations the place Hybrid Topics don’t seem to be the most suitable choice. For instance:
- When website design equipment take priority over total efficiency.
When you need to make use of some options particular to Complete Web site Modifying, such because the Web site Editor, complete template modifying by the use of blocks, and the International Kinds interface, a hybrid theme isn’t an choice as a result of those options don’t seem to be supported or are most effective in part supported in Hybrid Topics. - With headless WordPress websites in line with the WordPress REST API.
On this situation, Block Topics are to be most popular as a result of block knowledge are simply uncovered by the use of the REST API (see, for instance, the endpoint/wp/v2/blocks
) or WPGraphQL, the place Hybrid Topics may just upload better complexity. - When a no-code solution to website constructing is most popular.
Hybrid Topics don’t beef up template introduction or modifying by the use of the website editor. Even if beef up for template components can also be added, this beef up is lately restricted, and template control is essentially PHP-based.
The secret’s that there’s no onerous and speedy rule for opting for between hybrid and Block Topics. It relies on many components, equivalent to the abilities to be had for your workforce, the kind of website being constructed, efficiency necessities, backward compatibility, and a lot more.
Abstract
Complete Web site Modifying and Block Topics have dramatically modified how we construct WordPress web sites. The block philosophy provides customers extra energy to create complicated layouts and fine-tune each and every facet of a website online.
However in case you don’t seem to be but waiting to take the plunge as a result of your website might not be totally suitable with Block Topics or as it calls for particular options of a vintage theme, Hybrid Topics are an choice that permits you to have the most efficient of each worlds by way of permitting you to make use of some robust options of Block Topics whilst keeping up compatibility with the options of plugins and Vintage Topics.
To not point out efficiency. Block Topics can also be resource-intensive because of intensive block rendering and JavaScript utilization. Efficiency-optimized Hybrid Topics could make your website lighter and carry out higher by way of lowering the weight of JavaScript wanted.
The put up WordPress Hybrid Topics: A person and developer method gave the impression first on Kinsta®.
WP Hosting