name = $block_type; $this->set_props( $args ); } /** * Renders the block type output for given attributes. * * @since 5.0.0 * * @param array $attributes Optional. Block attributes. Default empty array. * @param string $content Optional. Block content. Default empty string. * @return string Rendered block type output. */ public function render( $attributes = array(), $content = '' ) { if ( ! $this->is_dynamic() ) { return ''; } $attributes = $this->prepare_attributes_for_render( $attributes ); return (string) call_user_func( $this->render_callback, $attributes, $content ); } /** * Returns true if the block type is dynamic, or false otherwise. A dynamic * block is one which defers its rendering to occur on-demand at runtime. * * @since 5.0.0 * * @return boolean Whether block type is dynamic. */ public function is_dynamic() { return is_callable( $this->render_callback ); } /** * Validates attributes against the current block schema, populating * defaulted and missing values, and omitting unknown attributes. * * @since 5.0.0 * * @param array $attributes Original block attributes. * @return array Prepared block attributes. */ public function prepare_attributes_for_render( $attributes ) { if ( ! isset( $this->attributes ) ) { return $attributes; } $prepared_attributes = array(); foreach ( $this->attributes as $attribute_name => $schema ) { $value = null; if ( isset( $attributes[ $attribute_name ] ) ) { $is_valid = rest_validate_value_from_schema( $attributes[ $attribute_name ], $schema ); if ( ! is_wp_error( $is_valid ) ) { $value = rest_sanitize_value_from_schema( $attributes[ $attribute_name ], $schema ); } } if ( is_null( $value ) && isset( $schema['default'] ) ) { $value = $schema['default']; } $prepared_attributes[ $attribute_name ] = $value; } return $prepared_attributes; } /** * Sets block type properties. * * @since 5.0.0 * * @param array|string $args Array or string of arguments for registering a block type. */ public function set_props( $args ) { $args = wp_parse_args( $args, array( 'render_callback' => null, ) ); $args['name'] = $this->name; foreach ( $args as $property_name => $property_value ) { $this->$property_name = $property_value; } } /** * Get all available block attributes including possible layout attribute from Columns block. * * @since 5.0.0 * * @return array Array of attributes. */ public function get_attributes() { return is_array( $this->attributes ) ? array_merge( $this->attributes, array( 'layout' => array( 'type' => 'string', ), ) ) : array( 'layout' => array( 'type' => 'string', ), ); } }