This plugin hasn’t been tested with the latest 3 major releases of WordPress. It may no longer be maintained or supported and may have compatibility issues when used with more recent versions of WordPress.

Block Lab



The Block Lab team has moved its custom block efforts over to Genesis Custom Blocks. To take advantage of all the great things about Block Lab as well as gain access to all new features as they are released, we recommend that you install Genesis Custom Blocks.

If you’re an existing Block Lab user and would like to learn more about what this means for you, including how to easily and automatically migrate to the new plugin, you can find more details here.

Gutenberg, the new WordPress editor, opens up a whole new world for the way we build pages, posts, and websites with WordPress. Block Lab makes it easy to harness Gutenberg and build custom blocks the way you want them to be built. Whether you want to implement a custom design, deliver unique functionality, or even remove your dependence on other plugins, Block Lab equips you with the tools you need to hit “Publish” sooner.


A Familiar Experience

Work within the WordPress admin with an interface you already know.

Block Fields

Add from a growing list of available fields to your custom blocks.

Simple Templating

Let the plugin do the heavy lifting so you can use familiar WordPress development practices to build block templates.

Developer Friendly Functions

Simple to use functions, ready to render and work with the values stored through your custom block fields.



See Contributing to Genesis Custom Blocks.



From Within WordPress

  • Visit Plugins > Add New
  • Search for “Block Lab”
  • Install the Block Lab plugin
  • Activate Block Lab from your Plugins page.


  • Clone Block Lab into a working directory with
  • cd into the block-lab directory, and run npm install && composer install
  • Next, build the scripts and styles with npm build
  • Move the block-lab folder to your /wp-content/plugins/ directory
  • Activate the Block Lab plugin through the Plugins menu in WordPress


Q: Do I need to write code to use this plugin?

A: Although the plugin handles the majority of the work in building a custom block, you will need to build HTML templates to display the content of the block. You can learn how in the developer documentation.

Q: I have an idea for the plugin

A: This plugin is open source and can only be better through community contribution. The GitHub repo is here.

Q: Where can I find documentation for this plugin?

A: Here


14 жніўня, 2020
I have been using it for quite some time and it does the job very well. It is a great tool it saves a lot of time but it needs a few more features to become excellent. For example: There is no multisite support. Any changes must be done on every site (and I have 35). At least I can export and import the Blocks but still, a centralized management would be preferred. Documentation says that Posts field supports CPT's but this is not the case. It only supports either Posts or Pages. And those two can not be combined. It would have been nice to work with both Posts and Pages (and CPT), like the Link field of WordPress. Checkboxes can not be grouped, for a nicer backend layout No 33% column width option No custom text/html can be added without a field. We might want to give instructions to our users or divide/group fields in the backend with titles/subtitles etc. Pasting in Number fields is not possible. Gutenberg gets the pasted number and creates it as a paragraph block, outside of the custom Block. I am using text fields for numbers just to be able to paste id's. Duplicating Blocks keeps them connected. This might have some use, but it would be better if duplicating blocks would create an identical but stand alone block. I know the team is working on future updates and I would be happy to reconsider my rating when time comes. Keep up the good work!
5 ліпеня, 2020
Admittedly, I never used blocks on my website. I would always just use custom HTML for every post because I have a few advanced elements that I needed to use HTML for. Just started experimenting with blocks last week to try and improve the workflow of making posts and this plugin works really well to help me create and maintain the custom blocks that I need.
11 чэрвеня, 2020
Didn't know about this plugin, but it makes it really easy to use custom Gutenberg Blocks. If you have to make then yourself, it quite hard to setup. Hope the pro version comes out soon though. Thanks!
13 лютага, 2020
I found this plugin after struggling for a while with the custom approach, which mostly relies on JavaScript. Suddenly I'm able to progress and (importantly) use PHP instead of JS. I really like that I can generate blocks programmatically, which allows (e.g.) select controls to be populated with values from the WP database rather than hard-coded. It's also good to see that I can use the block values to generate a shortcode, which helps to make them easier for users to manage. The templating system for output is neat, and like I said, it means that I can use my PHP/WP skills instead of having to rely on complex JS. Thanks to the authors, and I look forward to seeing how the plugin develops.
Read all 41 reviews

Contributors & Developers

“Block Lab” is open source software. The following people have contributed to this plugin.


“Block Lab” has been translated into 22 locales. Thank you to the translators for their contributions.

Translate “Block Lab” into your language.

Interested in development?

Browse the code, check out the SVN repository, or subscribe to the development log by RSS.


1.6.0 – 2020-09-02

Migration to Genesis Custom Blocks

  • New: Full migration UI to Genesis Custom Blocks, the new home of our custom block efforts
  • The new plugin has the same features, and your existing blocks and content should work the same after migration

1.5.6 – 2020-08-10

Small bugfixes, improved testing

  • Fix: Prevent a console warning for a prop in WP 5.5
  • New: More JS component tests, and an e2e test

1.5.5 – 2020-04-23

Removed upgrade screen, dependency updates

  • Tweak: By default, the upgrade screen is hidden
  • Tweak: Minor package.json dependency updates for security and reliability

1.5.4 – 2020-03-26

Improved stability, small bugfixes.

  • Fix: Now block_field() returns null if the second argument is true, preventing confusion.
  • New: JavaScript component tests, improving reliability.
  • New: Linting for accessibility issues.

1.5.3 – 2020-01-20

Some UI improvements, bugfixes, and improved stability.

  • Fix: Improved import error feedback, and cleaner methods
  • Fix: Editor bug from @wordpress/nux package being deprecated
  • New: Improved stability, including JS tests and query limit
  • New: Pre-commit hook to lint only staged files

1.5.2 – 2020-02-04

Some small tweaks to the Block Importer and onboarding dialogs.

  • New: Selective import now allows you to choose which of the blocks contained in your export file you’d like to import
  • Fix: Onboarding notices are fixed so that they show in the right places, and at the right times

1.5.1 – 2019-11-11

This is a bugfix release, focused mostly on compatibility with WordPress 5.3.

  • Fix: Themes can now hook into the block_lab_add_blocks action from the functions.php file
  • Fix: Classic Text fields now function as expected when inside a repeater
  • Fix: Rare instances of a NaN error when duplicating fields
  • Fix: Style fixes for the Block Editor in WordPress 5.3

1.5.0 – 2019-10-30

Ready for a big release? We’re really happy to be introducing quite a number of highly requested features, including a PHP API for registering blocks with code, a new text field with lists and headings, and some neat workflow efficiencies when building your block.

  • New: There’s now a PHP API for registering blocks using code (instead of the WP Admin UI). Documentation is here for now, but more on its way soon
  • New: Classic Text control (for Block Lab Pro users)! This field is similar to Rich Text, but has a few extra options for things like lists and headings
  • New: Duplicate fields – building your block is now so much easier, with the ability to duplicate rows
  • New: Repeater Row Count function – a helper function that returns the total amount of rows in a given repeater. Documentation here
  • New: Repeater Row Index function – a helper function that returns the current row, while looping through a repeater. Documentation here
  • Tweak: We’ve removed our dependency on global variables. This is mostly a best practice thing, not user facing. More details here.
  • Tweak: We’ve refactored quite a lot about our block Loader class, to make it more robust, secure, and maintainable
  • Tweak: Loads of new unit and integration tests – these help prevent us from introducing bugs or regressions in the future
  • Fix: Bug which affected sites which had removed or renamed the admin user role
  • Fix: Empty Rich Text fields now no longer output a single </p> tag

1.4.1 – 2019-09-11

You can now add a Minimum and Maximum Rows setting to repeaters, allowing you to specify a lower and upper limit on how many repeater rows can be added.

  • New: The repeater field now includes a minimum and maximum row setting
  • Fix: Location and Width settings are now visible again when adding a new field
  • Fix: Using block_sub_field() with an image now correctly outputs the image URL instead of the ID

1.4.0 – 2019-09-04

This release applies some finishing touches to the repeater field. It also introduces a new “Field Width” feature, which lets you choose the width of the fields as seen in the Editor.

  • New: Function to reset repeater rows: reset_block_rows()
  • New: Add a “Field Width” control to blocks
  • Fix: Empty repeater rows now save and can be moved properly
  • Fix: An issue which occasionally prevented repeater rows from being deleted
  • Fix: Prevent repeated requests to validate a Pro license
  • Tweaks: Add a different admin notice for when a license validation request fails
  • Tweaks: Many new and shiny unit and integration tests, making Block Lab more solid than ever

1.3.6 – 2019-08-22

  • New: Conditional Blocks, based on Post Type
  • Tweaks: Just about everything! We did a lot of refactoring in this release to make things silky smooth and über-maintainable.

1.3.5 – 2019-08-18

  • New: Block Lab will now enqueue a global stylesheet, so you can keep your common block styles in one place. Read more
  • New: Block templates can now be placed inside a sub-folder, for an even cleaner directory structure. Read more
  • Tweak: Use a textarea for specifying the default value of a textarea control.
  • Tweak: Better handling of deprecated functions.
  • Tweak: Rewrite of various functions, making developer access to common commands much simpler.
  • Fix: Child theme templates are now correctly loaded before their parent templates.
  • Fix: Autoslugs now continue to work properly after the title field loses focus.

1.3.4 – 2019-07-22

  • New: Block Lab grew to level 1.3.4. Block Lab learned Custom Categories.
  • Tweak: @phpbits used Pull Request. All right! The block_lab_get_block_attributes filter was caught!
  • Tweak: Template Loader used Harden. Template Loader‘s defense rose!
  • Tweak: Booted up a TM! It contained Unit Tests!
  • Fix: Wild Missing Filter in Inspector Controls bug appeared! Go! Bugfix!
  • Fix: Enemy Mixed Up Inspector Controls fainted! @kienstra gained 0902a06 EXP. Points!

1.3.3 – 2019-06-21

  • Fix: The previous release broke the className field, used for the Additional CSS Class setting. This fixes it.

1.3.2 – 2019-06-21

  • New: Rich Text Control (for Block Lab Pro users)!
  • New: Show Block Category in the list table
  • New: We’ve got a new block_lab_render_template hook which fires before rendering a block on the front end. Great for enqueuing JS
  • Tweak: Updated logo
  • Tweak: Prevent block field slugs from changing when you edit the field title
  • Fix: Saving your license key no longer results in an error page
  • Fix: License details screen showing the wrong information
  • Fix: Remove duplicate IDs on the edit block screen
  • Fix: Range sliders can now set a minimum value of zero
  • Fix: A console warning about unique props

1.3.1 – 2019-05-22

  • New: Support for Gutenberg’s built-in Additional CSS Class in your block template, by using the field className. Read more
  • New: The Textarea field now has an option to automatically add paragraph tags and line-breaks
  • Fix: Bug affecting blocks containing Pro fields when there’s no active Pro license

1.3.0 – 2019-04-30

Important: This update includes a backwards compatibility break related to the User field.

Read more here

  • New: A Taxonomy control type, for selecting a Category / Tag / or custom term from a dropdown menu (for Block Lab Pro users)
  • Fix: Bug with the Post control when outputting data with block_field()
  • Tweak: Update the User control to store data as an object, matching the Post control

1.2.3 – 2019-04-23

Important: This update includes a backwards compatibility break related to the Image field.
If you are using the block_value() function with an image field and externally hosted images, this update may effect you.

Read more here

  • New: A Post control type, for selecting a Post from a dropdown menu (for Block Lab Pro users)
  • New: Added the block_lab_controls filter to allow custom controls to be loaded (props @rohan2388)
  • New: The Image control now returns the image’s Post ID
  • Tweak: Travis CI support

1.2.2 – 2019-04-05

  • New: Block Editor redesign

1.2.1 – 2019-03-21

  • New: Automatic stylesheet enqueuing. Now you can create custom stylesheets for individual blocks! Read more here.
  • New: A User control type (for Block Lab Pro users)
  • Fix: Various multiselect bug fixes, allowing for empty values in the multiselect control

1.2.0 – 2019-02-27

  • New: Introducing Block Lab Pro!
  • New: A setting for the number of rows to display in a Textarea control
  • Fix: Allow negative numbers in Number and Range controls

1.1.3 – 2019-01-25

  • New: Image field

1.1.2 – 2019-01-11

  • New: Color field
  • Fix: Incorrect output for empty fields

1.1.1 – 2018-12-14

  • Fix: Undefined index error for multiselect and select fields
  • Fix: Correct values now returned for boolean fields like checkbox and toggle
  • Fix: Editor preview templates are back! Use the filename preview-{blog slug}.php
  • Fix: “Field instructions” is now a single line text, and renamed to “Help Text”
  • Fix: Slashes being added to field options
  • Fix: Allow empty value for select and number fields
  • Fix: Allow empty default values

1.1.0 – 2018-12-07

  • New: Complete revamp of the in-editor preview
  • New: Email field
  • New: URL field
  • New: Number field
  • New: block_config() and block_field_config helper functions, to retrieve your block’s configuration
  • Fix: filemtime errors
  • Fix: HTML tags were being merged together when previewed in the editor
  • Fix: Problems with quotes and dashes in a block’s title or field parameters
  • Fix: field_value() sometimes returned the wrong value
  • Fix: Incorrect values shown in the editor preview

1.0.1 – 2018-11-16

  • New: Added “Save Draft” button, so you can save Blocks-in-Progress
  • New: Better handling of the auto-slug feature, so you don’t accidentally change your block’s slug
  • New: Better expanding / contracting of the Field settings
  • New: Emoji (and special character) support! 😎
  • Fix: Resolved Fatal Error that could occur in some environments
  • Fix: Remove unused “Description” field
  • Fix: Remove duplicate star icon

1.0.0 – 2018-11-14

* Advanced Custom Blocks is now Block Lab

* New control types (Radio, Checkbox, Toggle, Select, Range)
* Block icons
* Field location – add your block fields to the inspector
* List table refinements
* Field repeater table improvements

* All the things. Probably not all the things, but close.

0.1.2 – 2018-08-10

* New properties help, default and required added to fields.
* Ability to import blocks from a {theme}/blocks/blocks.json file. Documentation still to be added.
* Gutenberg controls library updated preparing for 0.0.3.

Technical Changes
* Updated control architecture to improve development and adding adding of additional controls.
* Clean up enqueuing of scripts.

0.1 – 2018-08-03

  • Initial release.