From acda70184d0c63072a569bdb458f2f14535a5c55 Mon Sep 17 00:00:00 2001 From: Gary Pendergast Date: Mon, 22 Oct 2018 02:16:39 +0000 Subject: [PATCH] Block Editor: Add helper functions to collect meta box information. To allow the block editor to render meta boxes, it needs to collect information about how those meta boxes are registered, and format it for the block editor to make use of. See #45112. Built from https://develop.svn.wordpress.org/branches/5.0@43778 git-svn-id: http://core.svn.wordpress.org/branches/5.0@43607 1a063a9b-81f0-0310-95a4-ce76da25c4cd --- wp-admin/includes/post.php | 141 +++++++++++++++++++++++++++++++++++++ wp-includes/version.php | 2 +- 2 files changed, 142 insertions(+), 1 deletion(-) diff --git a/wp-admin/includes/post.php b/wp-admin/includes/post.php index c644ae3391..e37050670b 100644 --- a/wp-admin/includes/post.php +++ b/wp-admin/includes/post.php @@ -1890,6 +1890,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 ); /** @@ -2017,3 +2023,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 ); + ?> + + + + + + + +