diff --git a/src/wp-admin/edit-form-blocks.php b/src/wp-admin/edit-form-blocks.php
index 00fd098ec6..24afbf44a1 100644
--- a/src/wp-admin/edit-form-blocks.php
+++ b/src/wp-admin/edit-form-blocks.php
@@ -393,9 +393,25 @@ do_action( 'enqueue_block_editor_assets' );
 require_once( ABSPATH . 'wp-admin/includes/meta-boxes.php' );
 register_and_do_post_meta_boxes( $post );
 
-// Some meta boxes hook into the 'edit_form_advanced' filter.
+// Some meta boxes hook into the 'edit_form_after_title' and 'edit_form_advanced' filters.
+ob_start();
+/** This action is documented in wp-admin/edit-form-advanced.php */
+do_action( 'edit_form_after_title', $post );
 /** This action is documented in wp-admin/edit-form-advanced.php */
 do_action( 'edit_form_advanced', $post );
+$classic_output = ob_get_clean();
+
+$classic_elements = wp_html_split( $classic_output );
+$hidden_inputs    = '';
+foreach( $classic_elements as $element ) {
+	if ( 0 !== strpos( $element, '<input ') ) {
+		continue;
+	}
+
+	if ( preg_match( '/\stype=[\'"]hidden[\'"]\s/', $element ) ) {
+		$hidden_inputs .= $element;
+	}
+}
 
 require_once( ABSPATH . 'wp-admin/admin-header.php' );
 ?>
@@ -404,6 +420,6 @@ require_once( ABSPATH . 'wp-admin/admin-header.php' );
 	<h1 class="screen-reader-text"><?php echo esc_html( $post_type_object->labels->edit_item ); ?></h1>
 	<div id="editor" class="block-editor__container"></div>
 	<div id="metaboxes" class="hidden">
-		<?php the_block_editor_meta_boxes(); ?>
+		<?php the_block_editor_meta_boxes( $hidden_inputs ); ?>
 	</div>
 </div>
diff --git a/src/wp-admin/includes/post.php b/src/wp-admin/includes/post.php
index 462bde55c3..d550b7edb9 100644
--- a/src/wp-admin/includes/post.php
+++ b/src/wp-admin/includes/post.php
@@ -2034,8 +2034,10 @@ function get_block_editor_server_block_settings() {
  * Renders the meta boxes forms.
  *
  * @since 5.0.0
+ *
+ * @param string $html HTML to be printed in the metabox form.
  */
-function the_block_editor_meta_boxes() {
+function the_block_editor_meta_boxes( $html ) {
 	global $post, $current_screen, $wp_meta_boxes;
 
 	// Handle meta box state.
@@ -2058,7 +2060,10 @@ function the_block_editor_meta_boxes() {
 	// Render meta boxes.
 	?>
 	<form class="metabox-base-form">
-	<?php the_block_editor_meta_box_post_form_hidden_fields( $post ); ?>
+	<?php
+		echo $html;
+		the_block_editor_meta_box_post_form_hidden_fields( $post );
+	?>
 	</form>
 	<form id="toggle-custom-fields-form" method="post" action="<?php echo esc_attr( admin_url( 'post.php' ) ); ?>">
 		<?php wp_nonce_field( 'toggle-custom-fields' ); ?>
@@ -2202,4 +2207,16 @@ function the_block_editor_meta_box_post_form_hidden_fields( $post ) {
 	wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false );
 	// Permalink title nonce.
 	wp_nonce_field( 'samplepermalink', 'samplepermalinknonce', false );
+
+	/**
+	 * Add hidden input fields to the meta box save form.
+	 *
+	 * Hook into this action to print `<input type="hidden" ... />` fields, which will be POSTed back to
+	 * the server when meta boxes are saved.
+	 *
+	 * @since 5.0.0
+	 *
+	 * @params WP_Post $post The post that is being edited.
+	 */
+	do_action( 'block_editor_meta_box_hidden_fields', $post );
 }
