Chat Icon

How to Code Your First WordPress Gutenberg Block

The new WordPress editor Gutenberg marks an enormous shift away from the TinyMCE editor in direction of a WYSIWYG means of constructing pages and writing posts. While there are various Third-party web page builder plugins already, WordPress model 5.0 has made Gutenberg the brand new default editor.

In immediately’s article, I’m going to clarify the way you, as a developer, can begin leveraging that new editor by creating your personal blocks for WordPress Gutenberg. A block is a single ingredient that may be positioned on a web page or publish, like a picture, a paragraph or a video. We’ll code a block that allows you to simply embed Github gists by offering the gist URL or ID.

You can, clearly, adapt the code instance under to any performance you want. You might construct a product gallery, pricing tables, a slider, or every other sort of content material you need to show.

How Do WordPress Gutenberg Blocks Work?

First, let’s speak about how Gutenberg blocks work and the way they’re structured. They’re meant to be one stage on prime of HTML, in order that they’re their very own entities. When speaking about Gutenberg, you’ll usually hear the phrases Gutenberg publish and Gutenberg block. A Gutenberg Post is a whole weblog publish, whereas a Gutenberg block is a single block ingredient in that publish.

You can consider Gutenberg posts as collections of single blocks that make up your weblog publish. It’s vital that you simply don’t confuse Gutenberg posts with post_content. The latter is the publish in its printed format, optimized for the web site reader and retaining invisible marketings for later enhancing.

It’d take an excessive amount of time to clarify the whole language and the ideas behind Gutenberg, so as a substitute, I’ll level you to the official handbook for additional studying.

Check Mark Enjoying this text? Subscribe to the Liquid Web e-newsletter to get extra WordPress ideas and tips despatched straight to your inbox weekly.

The Three User-Interface Sections of Blocks

Since the brand new WordPress Gutenberg editor has a brand new consumer interface, let’s briefly stroll by means of the weather of blocks a WordPress consumer can work together with. Basically, there are three best-practices you need to comply with.

1. The content material space of the block needs to be the first interface.

Remember that the blocks ought to signify the content material that’ll truly present on the frontend. Hence, the realm that shows the content material also needs to be the primary means for WordPress customers to work together along with your block.

2. The toolbar is the place to put choices & controls.

Blocks even have toolbars, that are the secondary place for WordPress customers to work together with them. Depending on the context of utilization, your block won’t want a toolbar. They’re extremely context-relevant and visual on all display sizes. And they’ve a noticeable constraint: you want to talk your controls by means of icons, due to the icon-based UI of toolbars. Thus, any controls and choices you place into the toolbar want to be communicated by means of icons.

3. The block sidebar ought to include solely superior or tertiary controls

Do not depend on this sidebar to show vital controls, because it’s not seen by default on small / cell screens and may be collapsed on desktops. The Gutenberg handbook recommends you consider this space as part for choices that solely energy customers would possibly uncover.

The Create-Guten-Block Framework

Now that we now have a primary, very primary, understanding of Gutenberg blocks, let’s dive into constructing our first customized block. Therefore, we’ll be utilizing the create-guten-block framework by Ahmad Awais.

This framework is a powerhouse for builders. It comes with assist for React, webpack, ES6/7/8/Next, ESLint, Babel, and extra – with out forcing you to configure all these parts. Instead, you’ll be able to merely set up the framework utilizing npx (comes with npm 5.2+).

Simply use a terminal of your selection and cd into your wp-content/plugins listing. Then execute the next instructions and exchange “my-block” with the identify of your new block.

npx create-guten-block my-block
cd my-block
npm begin

Here’s a screenshot of my bash on Windows operating these instructions:

create guten block bash

It would possibly take a couple of minutes for the set up to full, however after that, you’ll be greeted with this display:

example for wpmastery code block using create guten block in bash

As you’ll be able to see, I created a block referred to as “wpmastery-code-block” for this instance.

Let’s take a look on the file construction of this new plugin:

file structure of new plugin

As you would possibly already assume, we’ll spend loads of time within the src/blocks folder to add our customized performance. In this instance, we would like the block to present a area the place a consumer can add the URL of a Github gist, to embed it in a publish.

There are a number of information we must always speak about to perceive how the plugin is about up:

1. plugin.php

This is the primary file. It incorporates plugin data that’s displayed within the WP Admin space or the repository (when you submit your block plugin). The create-guten-block framework makes use of that file to merely verify if it’s referred to as within the common WordPress context (and never immediately) and to load src/init.php.

2. init.php

The init.php file is used for enqueuing all of the Javascript and CSS information crucial on your block to work correctly. With Gutenberg, we are able to hook loading the frontend sources into the enqueue_block_assets hook on the frontend and enqueue_block_editor_assets within the backend.

3. blocks.js

Create-guten-block permits you to add greater than only one block; nevertheless, it has only one block per default. Blocks.js is used to import the Javascript information crucial to run any block you constructed from the blocks subdirectory.

4. src/blocks.js

Finally, the blocks.js file within the src listing incorporates all Javascript code defining the habits and performance of your block. It makes use of the registerBlockSort operate from the Block API to create the block ingredient with its save and edit capabilities. They’re predefined for you thru the framework and you’ll modify them to your wants.

Adding the Functionality to Your Block

Let’s begin customizing src/blocks.js and add our personal performance to it. We’ll add an interface to the editor that merely lets the consumer add a hyperlink to the Github gist they need to embed. If you’re creating this performance for the primary time, it won’t be very easy as Gutenberg blocks are closely counting on Javascript.

As Lara Schenk factors out in her primer on create-guten-block:

One of the important thing adjustments that Gutenberg brings to the WordPress ecosystem is a heavy reliance on JavaScript.

When I began dabbling round with customized Gutenberg blocks, I wasn’t acquainted with React. I’m nonetheless nowhere shut to writing good React code, however I don’t want to be so as to construct dependable Gutenberg blocks – and neither do you. Luckily for us, the create-guten-block framework lets us skip all the required configurations and units up the required parts for us. With a bit of fiddling round, you’ll give you the chance to customise the generated code to your wants.

For this tutorial, right here’s what we’ll create:

How to Code Your First WordPress Gutenberg Block Gutenberg gist URL to embed

We’ll create a block that reveals a easy “Gist URL to embed:” message and a textual content enter under, for the consumer to enter the URL of the Gist. Nothing too loopy, however place to begin to be taught extra concerning the Gutenberg API.

The performance is situated in src/block/block.js:

As you’ll be able to see, the JavaScript code for the block incorporates a number of vital parts. Let’s undergo them one after the other.

Line 12-14:

In this part, we’re loading assist for internationalization, the registerBlockSort operate and the PlainText ingredient from the worldwide wp object.

Inside the registerBlockSort() operate (referred to as in line 28), you’ll see quite a few parameters specified. Those are used for configuring your customized block. While I’ll depart it to the function’s documentation to go into all of the nitty-gritty, let’s speak about a number of vital code items.

Line 38:

In the attributes ingredient, we’re specifying the enter of the Gutenberg block, particularly the naming and formatting. It known as gist_url and formatted as a string, which is sensible as we would like our block to retailer a URL. We’ll later use the gist_url variable to retailer the URL, to show it within the backend and to render the embed code for the Gist within the frontend.

In this instance, we solely set one attribute – nevertheless, you’ll be able to set as many attributes as you’d like. They present all of the structured knowledge necessities on your block and can get handed to the edit() and save() capabilities as you’ll see under.

Line 51-61:

The edit() operate controls how the block is rendered within the editor, the backend of the web site. This operate runs solely when your block is used within the context of the Gutenberg editor. You can cross varied arguments to the operate, three of which we’re utilizing for our wants:


The className property returns the category identify for the wrapper ingredient. While the className property is added to the save() operate (see line 51 within the code) mechanically, it’s not mechanically added within the edit() operate (line 70 within the code). We might omit utilizing it on this instance, as it’s only used within the HTML markup with no particular operate.


As you would possibly already think about, this property offers us entry to all obtainable attributes and their corresponding values we specified above in line 38. If they already include a worth, the worth will likely be rendered as soon as the block is used within the Gutenberg editor. That rendering makes it simple for our customers to see which Gist URL they saved in our block.


As the block wants to work together with the consumer, significantly to retailer knowledge, we would like to embrace the setAttributes() operate. That permits us to replace particular person attributes (like our gist_url) based mostly on consumer interplay. You can see it operating in line 57.

Line 70-73:

The save() operate is the counterpart to the edit() operate and controls rendering of the block on the web site frontend. For most blocks, it’s really helpful to return an occasion of wp.element, which acts as an abstraction layer atop React. I omitted implementing a wp.ingredient as a return worth although, to preserve this tutorial as easy as potential.

As you’ll be able to see, it’s also potential to use JSX for returning HTML strings by means of the save() operate. Take observe that the returned code will likely be escaped. The plugin ought to serve for instance and place to begin for you, however please don’t use it as it’s in manufacturing. The Block API gives you extra insights on how to finest make the most of the save() technique.

Getting Started with Gutenberg

Creating Gutenberg Blocks requires far more JavaScript information in contrast to conventional theme or plugin improvement. However, this additionally leads to an enormous potential for decluttering theme improvement sooner or later. Imagine writing a theme code that solely consists of a easy loop, the place Gutenberg handles serializing and rendering the content material of the web page. Wouldn’t that be a dream state of affairs?

The studying curve for builders who aren’t acquainted with React, JSX, and all these frameworks may be fairly steep. It definitely took me fairly a while to familiarize myself with the brand new methodologies. A thanks goes out to Ahmad Awais for creating the create-guten-block framework that provides an enormous headstart into creating your first Gutenberg block.

Managed WordPress Can Help

While you might be busy getting your website prepared for the Gutenberg replace, let Liquid Web care for picture compression, core WordPress and plugin updates, and extra with Managed WordPress.

Check Also

Member Spotlight: Daugirdas Jankus

Launching a WordPress Product in Public: Session 14

Transcript ↓ Corey Maass and Cory Miller proceed the event of their new WordPress plugin, …