diff --git a/wp-admin/includes/post.php b/wp-admin/includes/post.php index 7f49482ba3..c664be627b 100644 --- a/wp-admin/includes/post.php +++ b/wp-admin/includes/post.php @@ -2039,6 +2039,12 @@ function use_block_editor_for_post( $post ) { return false; } + // We're in the meta box loader, so don't use the block editor. + if ( isset( $_GET['meta-box-loader'] ) ) { + check_admin_referer( 'meta-box-loader' ); + return false; + } + $use_block_editor = use_block_editor_for_post_type( $post->post_type ); /** @@ -2166,3 +2172,138 @@ function get_block_editor_server_block_settings() { return $blocks; } + +/** + * Renders the meta boxes forms. + * + * @since 5.0.0 + */ +function the_block_editor_meta_boxes() { + global $post, $current_screen, $wp_meta_boxes; + + // Handle meta box state. + $_original_meta_boxes = $wp_meta_boxes; + + /** + * Fires right before the meta boxes are rendered. + * + * This allows for the filtering of meta box data, that should already be + * present by this point. Do not use as a means of adding meta box data. + * + * @since 5.0.0 + * + * @param array $wp_meta_boxes Global meta box state. + */ + $wp_meta_boxes = apply_filters( 'filter_block_editor_meta_boxes', $wp_meta_boxes ); + $locations = array( 'side', 'normal', 'advanced' ); + $priorities = array( 'high', 'sorted', 'core', 'default', 'low' ); + + // Render meta boxes. + ?> +
+ + + + id ][ $location ] ) ) { + continue; + } + + foreach ( $priorities as $priority ) { + if ( ! isset( $wp_meta_boxes[ $current_screen->id ][ $location ][ $priority ] ) ) { + continue; + } + + $meta_boxes = (array) $wp_meta_boxes[ $current_screen->id ][ $location ][ $priority ]; + foreach ( $meta_boxes as $meta_box ) { + if ( ! empty( $meta_box['title'] ) ) { + $meta_boxes_per_location[ $location ][] = array( + 'id' => $meta_box['id'], + 'title' => $meta_box['title'], + ); + } + } + } + } + + /** + * Sadly we probably can not add this data directly into editor settings. + * + * Some meta boxes need admin_head to fire for meta box registry. + * admin_head fires after admin_enqueue_scripts, which is where we create our + * editor instance. + */ + $script = 'window._wpLoadBlockEditor.then( function() { + wp.data.dispatch( \'core/edit-post\' ).setAvailableMetaBoxesPerLocation( ' . wp_json_encode( $meta_boxes_per_location ) . ' ); + } );'; + + wp_add_inline_script( 'wp-edit-post', $script ); + + /** + * When `wp-edit-post` is output in the ``, the inline script needs to be manually printed. Otherwise, + * meta boxes will not display because inline scripts for `wp-edit-post` will not be printed again after this point. + */ + if ( wp_script_is( 'wp-edit-post', 'done' ) ) { + printf( "\n", trim( $script ) ); + } + + // Reset meta box data. + $wp_meta_boxes = $_original_meta_boxes; +} + +/** + * Renders the hidden form required for the meta boxes form. + * + * @since 5.0.0 + * + * @param WP_Post $post Current post object. + */ +function the_block_editor_meta_box_post_form_hidden_fields( $post ) { + $form_extra = ''; + if ( 'auto-draft' === $post->post_status ) { + $form_extra .= ""; + } + $form_action = 'editpost'; + $nonce_action = 'update-post_' . $post->ID; + $form_extra .= ""; + $referer = wp_get_referer(); + $current_user = wp_get_current_user(); + $user_id = $current_user->ID; + wp_nonce_field( $nonce_action ); + ?> + + + + + + + +