Custom Blocks Constructor – Lazy Blocks


Custom Blocks Plugin For WordPress

Developers magic wand for WordPress custom blocks. We created Lazy Blocks WordPress plugin, to help every developer get access to the powerful tools they need to quickly run websites based on WordPress block editor (called Gutenberg).

Official Site | Documentation | GitHub

Create custom blocks visually, add controls to your blocks using drag & drop, write blocks output using HTML or PHP code. You can create custom blocks as well as custom meta fields for specific post types. Furthermore, you are able to create post templates with predefined blocks for any post type.

🚀 Easy To Start

This everything you need to deploy your custom block in WordPress editor:

1. Configure Custom Block
Give a name to your custom block, set icon, category, etc.

2. Add Controls
Add control fields like simple text and complex image selectors.

3. Write Output Code
Output code for your custom block with HTML and PHP support.

🌟 Features

  • Custom blocks with output code
  • Custom blocks for posts meta fields
  • Large set of predefined controls
  • Show controls in block content / inspector
  • Multiple output methods allowed
    • Custom PHP
    • Custom HTML + Handlebars
    • Template files in theme folder
  • Export / Import blocks

🔥 Controls

To manage custom blocks attributes you need to use Controls. Lazy Blocks have a large set of controls predefined for you:

  • Basic
    • Text
    • Textarea
    • Number
    • Range
    • URL
    • Email
    • Password
  • Content
    • Image
    • Gallery
    • File
    • Rich Text
    • Classic Editor
    • Code Editor
    • Inner Blocks
  • Choice
    • Select
    • Radio
    • Checkbox
    • Toggle
  • Advanced
    • Color Picker
    • Date Time Picker
  • Layout
    • Repeater
  • Custom Controls read our extensive documentation

🏳️ Multilingual

Lazy Blocks adds a new layer of compatibility for WPML. All text controls of custom blocks are compatible with WPML and ready for translation.

🛠 Built For Developers

Lazy Blocks built by developers, for developers and gives you unlimited freedom to create custom blocks. Furthermore, there are PHP filters and actions to customize every part of your custom blocks from the backend. Possibility to use PHP and theme templates system.

Every UI part should be intuitive for simple custom blocks, but if you want to create something more complex, you may be required to read our extensive documentation.

🔥 Lazy Blocks Pro

The Lazy Blocks plugin is also available in a professional version which includes more controls and features! Learn more about Lazy Blocks Pro

In order to maintain the free version of the plugin on an ongoing basis, and to provide quick and effective support for free, we offer a Pro version of the plugin. The Pro version allows you to:

  • Additional Controls

    • Posts – Search and select posts based on post type or taxonomy
    • Taxonomy – Search and select categories, tags and any other custom taxonomies
    • Users – Search and select users based on user roles
    • Units – Advanced number input with possibility to select any CSS unit
    • Message – Display a helpful message between controls
    • Code Editor – Insert code parts using editor with syntax highlighting
  • Controls Conditions
    Conditionally display/hide controls. In order not to overload your block with a huge list of controls, you can hide some of them depending on the values of other controls.

  • Panels and Dividers
    The Panels and Dividers provides a way to structure controls into groups. It assists in better organizing the block panel UI.

  • Blocks Preloading
    Display blocks preview immediately once the page editor loaded.

  • SEO Enhancements
    Additional support for content analysis in Rank Math and Yoast SEO plugins.

Find much more custom blocks features of Lazy Blocks Pro today!


  • Blocks Constructor
  • Custom Blocks with Example Controls
  • Posts Templates


Automatic installation

Automatic installation is the easiest option as WordPress handles the file transfers itself and you don’t need to leave your web browser. To do an automatic install of Lazy Blocks, log in to your WordPress dashboard, navigate to the Plugins menu and click Add New.

In the search field type “Lazy Blocks” and click Search Plugins. Once you’ve found our plugin you can view details about it such as the point release, rating and description. Most importantly of course, you can install it by simply clicking “Install Now”.

Manual installation

The manual installation method involves downloading our Lazy Blocks plugin and uploading it to your webserver via your favourite FTP application. The WordPress codex contains instructions on how to do this here.


13 ліпеня, 2023
The plugin is great, it helped and speeded up the process of developing custom blocks with pre-defined options for authors. The options to create any block with any function are endless. I ran into an issue once and the personal support by the developer solved the problem in few days. I can really recommend the plugin. I purchased the pro version and it is going be part of many future pages we develop as an agency. I can recommend the plugin to everyone who want's to transition to full site editing and Gutenberg, but doesn't want to completely forget all the WordPress development we learned and loved the last 20 years.
6 лютага, 2023
Not satisfied with the core implementation of HTML5 elements? Or are they missing completely? Create them yourself! I matter of minutes, not hours, I had a custom-built HTML5 Video Block, that supports the default attribute, something that for some reason is lacking in the core block. I've also built an address block, and a progress bar block. All plain and well-supported HTML elements, that hasn't arrived in WordPress core for some reason, but provides so much value that it makes sense to add them manually. Experimenting on a dev site? Great. When done, export the block, and import it on production. Works like a charm!
11 лістапада, 2022 1 reply
I really like the direction the new Site Editor in Wordpress is developing - building custom blocks for Gutenberg though can be a nightmare. With the Lazyblocks plugin on the other hand this could not be easier! I'm using it in many of my clients websites, when i quickly need to implement a feature using blocks. And i couldn't help myself getting my hands on the Pro version just to support the development of this awesome piece of software. Full recommendation! Thanks and keep up the good work!
1 жніўня, 2022 3 replies
Great plugin to easily create Gutenberg Blocks, but as I unfortunately had to learn, not usable for multilingual sites as it is not compatible with WPML.
18 ліпеня, 2022
Lazy Blocks is a great plugin working out of the box, with an amazing user interface and a lot of great options, allowing to build custom rich blocks very easily. It's build for developers and documentation is great too.
26 чэрвеня, 2022
Getting the survey from author what to improve in this plugin - not too much there is, really. Amazing plugin.
Read all 73 reviews

Contributors & Developers

“Custom Blocks Constructor – Lazy Blocks” is open source software. The following people have contributed to this plugin.


“Custom Blocks Constructor – Lazy Blocks” has been translated into 9 locales. Thank you to the translators for their contributions.

Translate “Custom Blocks Constructor – Lazy Blocks” into your language.

Interested in development?

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



  • fixed JS error in editor in block containing <script> tag in content when preview showed


  • added support for WordPress 6.3
  • all blocks now have apiVersion 3, which means that in the latest Gutenberg you will have an iframed page editor
  • fixed block rendering error inside core/group block
  • fixed editor error when view block preview or add a couple of reusable blocks
  • minor changes


  • fixed wrong template rendering in Editor after InnerBlocks component used


  • fixed InnerBlocks component rendering number values with $ character


PRO plugin:

  • fixed JS error in Posts control in editor

FREE plugin:

  • fixed blocks rendering on Widgets screen
  • fixed default value with an empty array element of multi select
  • fixed JS error in multiple Select control in editor when null value


PRO plugin:
FREE plugin:

  • fixed Anchor option and ID attribute rendering in the block wrapper (Gutenberg reverted feature for automatic Anchor render in the dynamic blocks)


PRO plugin:

  • added higher priority for block preloading feature to let 3rd-parties hook the output before preloading

FREE plugin:

  • added defaults to user registered blocks (fixes the problem, when old registration configs fails when we add new parameters)
  • added remove_block method to the Blocks class to allow removing user registered blocks
  • added filter lzb/block_render/allow_inner_blocks_wrapper
  • added support for className attribute in <InnerBlocks /> component
  • skip control assets enqueue if there are no blocks registered (fixes the JS error in editor)
  • fixed nested blocks not displaying appender button with InnerBlocks component


PRO plugin:

  • added controls conditions based on selected block style or for a specific class name
  • added support for Term ID output in Taxonomy control
  • added lazy-blocks.php file as a helper when included within a theme or plugin
  • added support for Equal and Contains conditions for Units control
  • added ==class and !=class condition operators
  • changed saved attribute of Taxonomy control to ID when selected Term Object
  • fixed Posts and URL controls not displaying all available post types

FREE plugin:

  • added <InnerBlocks /> component support. Learn more here –
    • it is required to change your block code to use <InnerBlocks /> component if you use the InnerBlocks control
    • the old InnerBlocks control is now marked as deprecated and will be removed in future plugin updates
  • added possibility to register Block Styles
  • added option for Image control to insert from URL
  • added new Supports settings – Reusable and Lock
  • added possibility to sort tags inside the Select component
  • added width support for controls in the constructor UI
  • added apiVersion 3 to blocks
  • added include_within method to include plugin within theme or plugin. Learn more here
  • added lzb/control_value filters. Learn more here
  • added filter_control_value method into the Base control class for 3rd-party controls
  • added JS hook useBlockControlProps to use in 3rd-party controls
  • added helpful attributes to control wrappers such as data-lazyblocks-control-name
  • added control values filtering inside the repeater rows
  • added Toggle all label to Repeater control toggle
  • improved Repeater control to automatically open a newly added Row
  • improved Free block and InnerBlocks appender style in editor (Displays like in core blocks)
  • improved usage of Lazy Block’s render_callback to prevent conflicts with Gutenberg’s render_callback
  • improved meta controls, templates editor – use useEntityProp instead of editPost
  • improved Color Picker control:
    • use a single toggle to open the full color palette
    • added option to disable color palette
    • added Alongside text option
  • moved Ghost Kit supports settings to separate panel in editor constructor
  • moved Edit Block icon to the block toolbar
  • changed import_block method to public in Tools class
  • changed bundler to wp-scripts – faster builds and development process
  • fixed styles loading inside the editor iframe
  • fixed block render duplicate custom CSS and anchor
  • fixed Classic Editor error in widgets editor
  • fixed block constructor styles in editor with Astra theme
  • fixed JS error when condition field is not added in the PHP block registration
  • fixed sortable inside editor iframe
  • fixed displaying label and help in controls, where these settings are disabled
  • fixed duplicate Redux store loading inside editor constructor
  • removed CodeEditor component from lazyblocks Redux store (reduced editor.js file size)
  • removed throttle-debounce usage, use lodash instead
  • removed HTML elements from block descriptions, as it is deprecated since WordPress v6.2


PRO plugin:

  • added support for Repeater control in the Conditional Logic

FREE plugin:

  • added notice for invalid control name when creating block
  • fixed Preview component JS actions call after fetch complete
  • fixed displaying Date and Time pickers
  • fixed Date Time Picker displaying date in the toggle label


PRO plugin:

  • fixed block preloading inner-blocks attribute
  • fixed displaying controls in columns

FREE plugin:

  • added support for WPML
  • added “Edit Block” link inside the block description
  • fixed incorrect detection of the selected block to hide/show controls and preview
  • fixed displaying control label with Required mark
  • fixed margin between control and help text
  • fixed block render error when add “Hide If Not Selected” option to Inner Blocks control
  • fixed error “Render callback is not specified” when preview block with empty output code
  • fixed export block PHP closing function call
  • fixed JS error when change value of new control inside existing repeater
  • fixed Classic Editor and Repeater save attribute conflict
  • fixed debounce preview is not always reloaded after changes
  • fixed usage of deprecated action “lzb_handlebars_object”
  • fixed deprecated warning even if no deprecated hook used


PRO plugin:

  • added block preloading feature – all blocks loaded immediately, when you open the page editor
  • added support for content analysis in Rank Math and Yoast
  • added setting to remove block frame in page editor and display it as native block
  • added Link Suggestions option to URL control (select post types to suggest links when typing)
  • added Rich Preview option to URL control (display page title and image of selected URL)

FREE plugin:

  • added support for Blocks API v2
  • added lzb/init hook for developers to register blocks in PHP
  • added autoFocus to constructor control Type popup input search
  • added autoFocus to choices component when adding new choice
  • added JS filters – lzb.components.PreviewServerCallback.allowFetch, lzb.constructor.code-settings.output-method, lzb.constructor.code-settings.output-code, lzb.constructor.code-settings.output-template, lzb.constructor.code-settings.preview, lzb.constructor.code-settings.additional
  • added PHP filters – lzb/block_defaults, lzb/block_data
  • added PHP actions – lzb/init
  • fixed constructor control Type popup padding
  • fixed constructor code preview iframe width
  • fixed admin PHP warning when user with Editor role
  • fixed blocks conditional displaying in selected post types
  • fixed registering user blocks which don’t have all control parameters
  • fixed registering block inside init hook
  • fixed BaseControl help with HTML generates JS errors in console
  • fixed Select control with Multiple option CSS overflow problem
  • fixed templates custom meta settings width
  • fixed control label displaying when it is empty
  • changed block configs sanitization function priority to prevent possible conflicts
  • removed URL control Reset button, use standard icon instead
  • disabled custom class name support in Free block
  • deprecated action lzb_handlebars_object, use lzb/handlebars/object instead


PRO plugin:

FREE plugin:

  • a lot of code rewrites to improve stability and performance
  • added support for Image control data in the repeater title short tags
  • added possibility to save block data with html tags. Supported block description, controls labels and help fields
  • added basic styles to the Code Editor control
  • added support for “Content Only” lock in Templates
  • added support for multiple color palettes (registered in the theme and in Gutenberg itself) in the Color Picker control
  • fixed enqueue styles in FSE
  • fixed “Hide if block is not selected” option when control displayed in both placements (Inspector and Content)
  • fixed “Hide if block is not selected” option to work with inner blocks
  • fixed adding defaults to the new row in repeater
  • fixed unlocking post saving when remove locked block
  • fixed URL control styles
  • fixed icon box in admin block list ui when no icon selected
  • fixed constructor rendering when 3rd parties use the allowed_block_types_all hook
  • fixed widgets screen block error
  • fixed Classic Editor control in Widgets Screen
  • fixed Rest permissions check errors
  • fixed error message displaying when block preview is not rendered
  • simplified exported block configs (removed fields with default values)
  • changed react-sortable-hoc to dnd-kit – no more error messages in the console
  • removed limitation for 3 tags per block
  • removed wrapper from controls displayed inside Inspector
  • minor changes




  • added “Free Content” block in the Templates editor
  • fixed PHP warnings when migrating to v2.5.0


  • improved Templates editor (now you can use Gutenberg editor and insert full-featured blocks)
  • fixed get_lzb_meta output of array and object values
  • fixed Constructor screen title click in WP 5.9
  • fixed long block names word wrap in export page
  • fixed Color Picker control styles in editor


  • changed post types list limit in the templates editor ()
  • changed minimal PHP version to 7.2


  • added option to use the color slug in the Color Picker control (see Output Format option)
  • fixed js errors in the widget screen
  • changed minimal WP version to 5.8


  • fixed ‘wp-editor’ deprecated error
  • fixed conflict with Widgets Gutenberg editor
  • fixed repeater sorting error
  • removed accepted list for file control Upload button since it is not working correctly in some cases


  • added support for WordPress 5.8
  • added a lot of UI improvements
  • added slug check in the block name before register block (fixes possible errors)
  • added placeholder color in image and gallery controls if images no more exist in media library
  • added control names autocompletion to code editor in the blocks constructor
  • fixed multiple select control wrong height and styles
  • fixed displaying control post meta using function get_lzb_meta when live reload preview
  • fixed Classic Control toolbar sticky
  • fixed Date Control JS error
  • fixed long words render in control labels and descriptions
  • fixed PHP 8 deprecated error
  • fixed wrong activation hook call


  • added compatibility with WordPress 5.7
  • added possibility to display default meta value (without hard code, using native WordPress 5.5+ API)
  • improved date time picker styles
  • improved constructor controls rendering code
  • fixed double classes rendering in editor, when Single Output code enabled
  • minor changes


  • added possibility to duplicate blocks
  • added top toolbar to admin pages
  • improved Date Time picker
    • always display TimePicker component (to let users manually set day, month and year)
    • display only necessary parts of TimePicker component
    • better format on button label
  • changed constructor Type selector to modal
  • fixed Classic control initialize problem in WordPress 5.6 update
  • fixed constructor disabled Update button
  • fixed constructor controls label margin
  • fixed compatibility with Amazon S3 Offload Media plugin (changed image and gallery controls image URL retrieve method)
  • minor changes




  • added support for WordPress 5.5
  • added support for theme template files
  • added Output Format option for Select and Radio controls
    • You can output Label
    • You can output array with Value and Label
  • added RTL support
  • added code to force enable Gutenberg editor on “lazyblocks” post type pages
  • added code for custom blocks constructor pages, that force enables it and inserts
  • added support for “Frame” and “Custom CSS” Ghost Kit extensions
  • added “PRO Survey” link in the admin menu to get help from users
  • changed default category to “text”
    • Don’t forget to update categories for all your custom blocks
    • Since WordPress 5.5 added new categories: Text, Media, Design
    • Removed categories: Common, Formatting, Layout
  • fixed errors in editor preview, when using get_lzb_meta function (now it is working as on frontend)
  • fixed slashes save in lazyblocks meta data (fixes custom code slashes)
  • fixed custom block code editor content when switching between Frontend and Editor tabs
  • fixed JS error when opened “lazyblocks” list admin page
  • minor improvements


  • added JS files translation


  • added reset button to URL control


  • added help link to “Save in Meta” control option
  • added higher priority for registering post templates (possible fix for custom post types)
  • fixed custom fields support conflict with constructor interface


  • fixed JS build error


  • added support for required fields inside repeater
  • prevent possible bugs with adding custom blocks using PHP (register custom blocks inside init hook with priority = 20)
  • fixed repeater and Classic Control usage when all rows opened
  • fixed repeater control undefined value error
  • fixed custom categories registration conflict with 3rd-party plugins
  • fixed update control array data in Constructor (can’t clear)


  • added WordPress 5.4 compatibility
  • added 12 hours format for Time Picker automatically based on WordPress settings
  • removed the possibility to disable both date and time in Date Time Picker control
  • fixed inability to remove all controls from custom block


  • fixed possible PHP 7.4 error because of admin Tools export checks


  • fixed error when no icon specified to custom block


  • fixed Date Time Picker control displaying selected value
  • fixed Classic Editor control rendering bug when used in multiple custom blocks
  • fixed Allow Null value save in Select control
  • hide “duplicate” button from Inner Blocks control in constructor


  • fixed checkbox and toggle controls meta filter php error


  • added custom controls API
  • added Export / Import JSON for custom blocks and templates
  • added error messages to File, Image and Gallery controls
  • added Width option to controls
  • added alongside option to Checkbox and Toggle controls
  • added Example Block after plugin activation
  • added Classic Editor control
  • added possibility to include plugin code in themes and 3rd-party plugins
  • changed block icons to Material SVG
  • fixed change value in Rich Text and Code Editor
  • fixed errors when no specified block icon or title
  • fixed Rich Text control styles
  • fixed PHP errors when control type is not defined
  • fixed height of Select component
  • fixed file control Upload button error, when no allowed mime types selected
  • fixed possible PHP warnings when control meta used, but array item doesn’t exist
  • fixed URL control paddings
  • fixed constructor admin list mobile devices styles
  • fixed required notice position
  • removed Multiple option from Radio control
  • constructor
    • improved UI
    • added Duplicate and Delete buttons on controls
    • added icons to Controls
    • added control placeholder if label is not specified
    • added control no label if label is not specified
    • improved placement settings (changed select to buttons)
    • improved date time settings (changed select to buttons)
    • fixed select component style
    • fixed select component z-index
    • fixed document tabs margin
    • fixed overflow and dropdowns sidebar


  • fixes for WordPress 5.3
  • fixed placement control when enabled option hide_if_not_selected and set placement to inspector


  • added support for PHP output method (instead of Handlebars)
  • added new Repeater options:
    • Row Label
    • Add Button Label
    • Minimum Rows
    • Maximum Rows
    • Collapsible Rows
  • added Characters Limit option to text controls
  • added js actions to PreviewServerCallback component (before change and after change), useful for developers
  • added support for Ghost Kit Extensions
  • added callback and allow_wrapper filters for both contexts using single filter name (frontend and editor)
  • added filter for output attributes
  • improved Meta setting (use control name as meta if custom meta name is not defined)
  • fixed encoded values in Repeater controls
  • fixed possibility to add more than 1 InnerBlocks control per custom block


  • added experimental Required option for top-level controls
  • added possibility to choose which custom blocks and template export on Tools page
  • changed Templates page to use React
  • changed Tools page to use React
  • fixed PHP error when className is not available in the custom block
  • fixed PHP warning when used multiple select options
  • minor changes


  • added File control
  • changed anchor attribute settings (fixed anchor save in the latest Gutenberg)
  • fixed select control value save (if no Multiple option set)
  • fixed InnerBlocks with option “Hide if block is not selected”
  • fixed boolean meta data of constructor save (convert to string)


  • fixed order of controls was not saved
  • fixed php error when no custom blocks available
  • fixed selecting inner repeater controls
  • fixed control styles disappear while resorting
  • prevent control selection on drag handler click
  • prevent control selection on repeater toggle click


  • Improved Constructor UI
    • Custom block setting moved to the right side (Inspector)
    • Control setting opens in Inspector when you select it
  • added alpha channel option to Color Picker control
  • added ‘Save in Meta’ support for Repeater field
  • added possibility to hide custom block previews in editor
  • added possibility to use single code output for both Frontend and Editor
  • added Select Multiple option
  • fixed custom block preview loading when returned empty string
  • fixed Keywords, Align and Condition custom block settings save when empty


  • added block slug validation in constructor
  • added slug creation if don’t exist after block title added
  • fixed controls saving in new custom blocks
  • fixed icon picker button styles in constructor


  • changed Block Constructor page to Gutenberg
  • added option to hide controls if custom block is not selected
  • added Radio control
  • fixed duplicating of categories selector in custom blocks constructor
  • fixed custom block ID duplication
  • fixed custom block preview loading error
  • fixed custom block names some characters
  • fixed custom post types publishing
  • fixed error if custom post type removed, but the template for this post is still available


  • fixed controls save when updating Lazy Blocks post in WordPress 5.1


  • added lzb/handlebars/object action inside init
  • trim class attribute value on frontend output
  • fixed loading Templates admin page and select initialization when more then 1 template added
  • fixed Range control with Save in Meta option
  • fixed JS error on all admin pages
  • fixed Handlebars PHP 7.3 error


  • added action to add Handlebars custom helpers (info in documentation)
  • added filter to disable frontend block wrapper of the custom block (info in documentation)
  • improved columns in admin list of custom blocks
  • extended list of symbols that need to be removed from the block slug
  • fixed PHP output for frontend if HTML output is empty
  • fixed losing Frontend & Editor output data when added output PHP filters


  • added support for custom blocks PHP preview rendering in Editor
  • added toggle button in Repeater control to toggle all rows
  • added custom block slug validation and automatic creation in constructor
  • added descriptions to additional block fields in constructor
  • added new attribute blockUniqueClass that will adds automatically on each custom block
  • added title on Image and Gallery attributes object
  • changed Editor rendering to AJAX also for Handlebars templates
  • changed output for custom blocks – always added wrapper with block class


  • added unique blockUniqueClass attribute to each custom block attributes and in editor wrapper


  • added unique blockId attribute to each custom block
  • simplified enqueue in admin templates page
  • fixed do_shortcode wrong attributes output (reserved data and hash attributes)
  • fixed Range control saving value


  • added filter for output frontend PHP of custom blocks (read in documentation)
  • added Allow Null option to Select control
  • added Help option in controls
  • added Placeholder option in controls
  • added all existing categories in custom block categories selector
  • fixed gallery control editable images
  • fixed dropzone position in image and gallery controls
  • fixed custom category title changing to slug
  • fixed automatic fill of control name in constructor
  • fixed date control error in WP 5.0
  • minor changes


  • fixed templates loading in Gutenberg 4.5
  • fixed do_shortcode work with Image control value


  • fixed controls errors in Gutenberg 4.2.0 (Gallery, Image, Code Editor)


  • added Inner Blocks control
  • added support for custom frontend render function (use PHP instead of Handlebars)
  • added possibility to resort Repeater rows
  • changed Repeater control styles
  • disabled autofocus in URL control
  • fixed URL input width
  • fixed Number control value save


  • added RichText control


  • added possibility to use all registered blocks in posts templates
  • added selector with search and block icons to easily find and add blocks to templates
  • added Free Content block to use in templates when template locked
  • added + button inside Repeater block
  • added Range control
  • added Color Picker control
  • added Date Time Picker control
  • added Documentation link in admin menu
  • improved URL control to search for available posts in blog


  • fixed catchable fatal error when use do_shortcode Handlebars helper




  • Initial Release