Comprehensive WordPress Custom Blocks Guide

Written by WordPress Expert

November 8, 2023
Comprehensive WordPress Custom Blocks Guide

In order to give users a greater degree of control over the appearance and functionality of their websites, WordPress, one of the hottest content management systems on the market today, has continued to evolve. The introduction of a block editor, also known as Gutenberg, is one of the most important developments in this area that was introduced in 2017. The Block editor will allow you to plan your website content in a more modular and visually interesting way, including allowing developers to create WordPress custom blocks.

In this comprehensive guide, we'll walk you through the process of creating a custom WordPress custom blocks, from setting up your development environment to registering and styling your block. You will be able to create your own WordPress custom blocks at the end of this training, so that you can extend functions on your website.

Introduction to WordPress Blocks

Before charging full speed ahead into the process of creating custom blocks, let's start with a basic understanding of what WordPress blocks are and why they're super handy.

What Are WordPress Blocks?

The main units of content included in the Gutenberg block editor are WordPress blocks. It allows for a modular and flexible way of creating and organizing content. Each block contains a single part of the content or function, such as paragraphs, headings, images, galleries, buttons and more.

In order to create websites, blog posts or other content types, the block editor will allow easy manipulation and layout of these blocks. Each block can be thought of as a separate component with the possibility to modify and place anywhere on your page. With this modular approach, it is easy to create complex layouts without having to write custom HTML or CSS code.

Why Create Custom Blocks?

While WordPress offers a broad selection of pre-designed blocks to work with, there are several compelling reasons to create your own custom blocks:

  • Tailored Functionality
  • Unique Design
  • Consistency
  • User Experience

Tailored Functionality

Some of the features that cannot be found in default blocks can be integrated into custom blocks. This may be anything from a custom pricing table to displays of dynamic content.

Unique Design

If there's a design concept you can't achieve in standard blocks, WordPress custom blocks give you total control over the way your content looks and feels.


In maintaining a consistent look and feel on your website, you can use custom blocks. Reusable custom blocks can be defined for headers, footers or other design elements.

User Experience

The user experience on your site can be enhanced by creating custom blocks. You can create interactive elements, like quizzes or product displays, which engage your audience for example.

Setting Up Your Development Environment

You must create your development environment before you can learn about custom blocks. It will allow you to run in your test environment with WordPress. When adding code to your live server, don't do so because it could be broken and you will have to spend a lot of time fixing it.

Setting Up Your Development Environment

Follow these steps to set up your development environment:

  • Install WordPress Locally
  • Install Code Editor
  • Version Control
  • Local Development Plugins

Install WordPress Locally

The most convenient way to create custom blocks is to set up a local WordPress development environment. You can use tools like XAMPP, or MAMP to install WordPress on your computer. This enables you to experiment freely without the risk of breaking your live website.

Alternatively, you could even set up a WordPress staging site.

Install Code Editor

Choose a code editor to write and edit your custom block's code. Popular choices include Visual Studio Code, Sublime Text, or PHPStorm. Ensure your code editor supports JavaScript and PHP development.

Version Control

Consider using a version control system like Git to track changes in your code and collaborate with others if needed. GitHub offers free repositories for your WordPress projects.

Local Development Plugin

Install the Query Monitor plugins in your local WordPress environment for block development. This plugin helps you identify and troubleshoot performance issues and errors in your code.

Creating the Custom Block Plugin

WordPress recommends creating custom blocks as plugins. This approach keeps your code organized, makes it easier to manage, and allows you to reuse your blocks across different themes.

Follow these steps to create your custom block plugin:

  • Create a New Directory
  • Create the Main Plugin File
  • Add Basic Plugin Information

Create a New Directory

Inside your local WordPress installation's wp-content/plugins directory, create a new directory for your custom block plugin. Give it a unique, descriptive name related to your block's functionality.

For example, if you're creating a custom testimonial block, you might name your directory ‘custom-testimonial-block’.

Create the Main Plugin File

Inside your plugin directory, create a main PHP file with the same name as your directory, followed by the .php extension. For our example, the file should be named ‘custom-testimonial-block.php’.

Add Basic Plugin Information

Open your main plugin file (‘custom-testimonial-block.php’) and add the following information at the top:

 * Plugin Name: Custom Testimonial Block
 * Description: A custom Gutenberg block for testimonials.
 * Version: 1.0
 * Author: Your Name

// Add your block code here.

Replace the placeholder values with your block's details.

With the plugin structure in place, it's time to define the structure of your custom block.

Defining the Block Structure

To create a WordPress custom block, you need to define its structure using JavaScript and React. WordPress provides a JavaScript library called ‘@wordpress/scripts’ that simplifies the block development process. You will need to know the command line and be comfortable with it going forward with this guide.

  • Install Dependencies
  • Block Structure Files
  • Edit Block Metadata

Install Dependencies

In your plugin directory, open your command line terminal and navigate to the plugin folder (‘custom-testimonial-block’ in our example). Run the following command to initialize the JavaScript development environment:

npm init @wordpress/block custom-testimonial

This command sets up the necessary dependencies and configuration for block development.

Block Structure Files

After running the command, you'll find a new directory named ‘custom-testimonial’ in your plugin folder. Inside this directory, you'll have the following files:

block.json: Contains block metadata and settings. editor.scss: For block editor styles. index.js: The main JavaScript file for your block. save.js: Defines how the block is saved and displayed on the front end.

Edit Block Metadata

Open the ‘block.json’ file inside your block folder and customize it to match your block's name and description:

  "name": "custom-testimonial",

": "Custom Testimonial",
  "description": "A custom testimonial block for your website.",
  "category": "common",
  "icon": "format-quote",
  "keywords": ["testimonial", "quote"]

This metadata file defines how your block appears in the block editor.

Registering the Custom Block

It's time to register the block with WordPress now that you've defined the structure and metadata of the block. This registration process tells WordPress where and how to display your custom block.

  • Open index.js
  • Import Dependencies
  • Register the Block

Open index.js

Open the ‘index.js’ file located in your block's folder (‘custom-testimonial’ in this article’s example) using your code editor. This file is where you'll define your custom block's behavior.

Import Dependencies

At the top of your index.js file, import the necessary dependencies:

import { registerBlockType } from '@wordpress/blocks';

import { TextControl } from '@wordpress/components';

import { __ } from '@wordpress/i18n';

These dependencies enable you to create your block type and include features like user interface components and internationalization.

Register the Block

Next, define and register your custom block using the registerBlockType function:

registerBlockType('custom-testimonial/testimonial', {
  title: __('Custom Testimonial', 'custom-testimonial-block'),
  icon: 'format-quote',
  category: 'common',
  attributes: {
    content: {
      type: 'string',
      source: 'text',
      selector: '.testimonial-content',
    author: {
      type: 'string',
      source: 'text',
      selector: '.testimonial-author',
  edit: function (props) {
    // Block editing interface.
  save: function (props) {
    // Block output in the front end.

In this code:

  • 'custom-testimonial/testimonial' is the block name.
  • ‘title’ defines the block's name in the editor.
  • ‘icon’ specifies the block's icon.
  • ‘category’ determines where the block appears in the block editor.
  • ‘attributes’ define the data your block will use.
  • ‘edit’ and ‘save’ functions will be where you customize the block's editing interface and front-end display.

Creating the Block Edit and Save Functions

Now that you've registered your custom block, you need to define how it appears in the block editor (edit function) and how it's saved and displayed on the front end (save function).

  • Edit Function
  • Save Function

Edit Function

The edit function defines the block's appearance and behavior in the block editor. It returns JSX (JavaScript XML) that describes the block's user interface.

edit: function (props) {
  const { attributes, setAttributes } = props;

  return (
    <div className={props.className}>
        label={__('Testimonial Content', 'custom-testimonial-block')}
        onChange={(newContent) => setAttributes({ content: newContent })}
        label={__('Author', 'custom-testimonial-block')}
        onChange={(newAuthor) => setAttributes({ author: newAuthor })}

In this code:

  • ‘attributes’ is an object containing the block's data.

  • ‘setAttributes’ is a function used to update attribute values.

  • ’ components provide text input fields for content and author.

Save Function

The save function defines how your block's content is saved and displayed on the front end. It returns HTML markup that represents your block's appearance when viewed on your website.

save: function (props) {
  const { attributes } = props;

  return (
    <div className="testimonial">
      <blockquote className="testimonial-content">{attributes.content}</blockquote>
      <cite className="testimonial-author">{}</cite>

In this code the block's content and author attributes are used to populate the HTML output.

Styling Your Custom Block

You may want to add a few CSS styles so that your custom block is visually appealing. A method specifically for your block is provided by WordPress to enqueue stylesheets. Here's how to do it:

  • Create a CSS File
  • Write Block Styles
  • Enqueue Styles in PHP

Create a CSS File

Inside your block folder (‘custom-testimonial’), create a CSS file named editor.scss. This file will contain your block's styles.

Write Block Styles

In your ‘editor.scss’ file, define the CSS styles for your block. For example:

/* Block wrapper styles */
.testimonial {
  padding: 20px;
  border: 1px solid #ddd;
  background-color: #f9f9f9;
  margin: 20px 0;

/* Testimonial content styles */
.testimonial-content {
  font-size: 18px;
  margin: 0;

/* Testimonial author styles */
.testimonial-author {
  margin-top: 10px;
  font-style: italic;

These styles define the appearance of your custom testimonial block in both the block editor and on the front end.

Enqueue Styles in PHP

To ensure your block styles are loaded correctly, enqueue the CSS file in your main plugin PHP file (‘custom-testimonial-block.php’):

function custom_testimonial_block_enqueue_styles() {
    plugins_url('custom-testimonial/editor.css', __FILE__),
    filemtime(plugin_dir_path(__FILE__) . 'editor.css')

add_action('enqueue_block_editor_assets', 'custom_testimonial_block_enqueue_styles');

This PHP code tells WordPress to load your block's styles when the block editor is active.

Testing and Debugging Your Block

Before deploying your custom block to your live website, it's crucial to thoroughly test and debug it to ensure it works as expected.

  • Test in the Block Editor
  • Preview on the Front End
  • Debugging

Test in the Block Editor

  1. Activate your custom block plugin in your local WordPress environment.
  2. Create a new post or page.
  3. Add a new block and search for your custom block by name (e.g., "Custom Testimonial").
  4. Insert your block and configure its settings.
  5. Save the post or page to see how your block appears in the editor.

Preview on the Front End

To see how your custom block looks to visitors, preview the post or page on the front page of your website. Make sure the style is in line with your design.


If you encounter any issues or errors while developing your custom block, you can use debugging tools like Query Monitor to identify and troubleshoot problems in your code. If there are JavaScript errors, check the browser console.

Tips and Further Resources

If you got to this point, then fantastic! Congratulations! You've successfully created a custom WordPress block from scratch. You now have the knowledge and skills to design and implement custom blocks that enhance your website's functionality and appearance.

As you continue your journey into WordPress block development, consider exploring the following topics and resources to further expand your expertise:

Advanced Block Development

Learn about more advanced block features like dynamic blocks, block styles, and block attributes.

Block Templates

Explore how to create block templates that allow you to design entire page layouts with custom blocks.

Block Reusability

Discover how to make your custom blocks reusable across different pages and posts.

WordPress Block Editor Handbook

Refer to the official WordPress Block Editor Handbook for more in-depth documentation on block development.

Community and Forums

Join WordPress development forums, communities, and groups to connect with other developers and seek help when needed.



with the discount code



In Summary

With these resources and your newfound development skills with WordPress custom blocks, you can take your WordPress website to the next level, creating unique and engaging content for your audience. Happy WordPress custom block building!

Frequently Asked Questions

Is a WordPress blog free?

Anyone can download, use, customize, and edit the WordPress code as long as they release it under the GNU General Public License (GPL). Even though the software is free, you can end up paying for things like premium support and hosting.

Can WordPress be used for eCommerce?

WordPress offers many different ways to build an eCommerce online store for all types of products and markets. Almost 40 percent of all online shops are powered by WooCommerce, a WordPress eCommerce plugin.

Why choose Verpex for WordPress?

As the leading CMS out there, we’ve made it our mission to offer the most comprehensive and streamlined WordPress solutions on the market. Backed by a responsive customer care team and reliable site enhancement tools, we ensure our users get the full WordPress value and support for a reasonable price.

Can I use WordPress with any hosting

WordPress can generally be used with most hosting providers, as long as the hosting meets the minimum requirements for running WordPress.

Jivo Live Chat