Dynamic blocks use render callbacks instead of save functions, generating content server-side rather than storing HTML in the database. Add a render_callback parameter to register_block_type pointing to a PHP function.
Convert static blocks to dynamic by removing the save function from JavaScript registration and adding a PHP render callback. Existing static blocks will show validation errors until converted to blocks in the editor.
Use get_block_wrapper_attributes() in PHP render functions to output proper classes and styles for block supports, equivalent to useBlockProps in JavaScript components.