Skip to content
PHP Filters

lzb/add_user_template

Filters the array handed to lazyblocks()->add_template(), before Lazy Blocks stores it.

A template registered from a theme is fixed in code, so a child theme or a plugin cannot widen its post types or change its lock. This filter is the place to do that.

Attributes

NameTypeDescription
$dataArraytemplate data, as passed to add_template()

$data takes the same keys a template read from the database has:

NameTypeDescription
idIntpost ID, absent for a template registered from PHP
titleStringtemplate name shown on the Templates screen
post_typesArraypost type slugs the template applies to
template_lockStringall, insert, or an empty string for no lock
blocksArrayblock template array, each entry array( 'core/heading', array( 'level' => 2 ) )

Usage

PHP
function my_lzb_add_user_template( $data ) {
  if ( ! isset( $data['title'] ) || 'Landing Page' !== $data['title'] ) {
    return $data;
  }
 
  // Reuse the landing page template on the `page` post type as well,
  // and stop editors from inserting blocks that are not in it.
  $data['post_types'][]   = 'page';
  $data['template_lock'] = 'insert';
 
  return $data;
}
 
add_filter( 'lzb/add_user_template', 'my_lzb_add_user_template' );

register_post_type_args() reads post_types, blocks and template_lock for every post type WordPress registers, not only for the Lazy Blocks ones, so dropping one of those keys throws an undefined-index warning on every register_post_type() call on the site. Lazy Blocks keeps its own callback here at priority 10, converting the pre-2.5.0 data sub-array: data.post_type becomes the post_types array, data.template_lock becomes template_lock, and each array( 'name' => 'core/paragraph' ) entry becomes array( 'core/paragraph' ).

Templates are deprecated since v4.0.0, see Templates.

Was this article helpful?

Copyright © 2026 Lazy Blocks.