Make WordPress Core


Ignore:
Timestamp:
10/29/2018 02:42:23 AM (8 years ago)
Author:
pento
Message:

Block Editor: Fix meta boxes not showing.

The block editor needs to duplicate the classic meta box behaviour, so it can extract the registered meta boxes, and import them into the block editor.

To match the classic editor behaviour as closely as possible, this moves the relevant code from the classic editor, into a new function, so it can be called by both.

Props pento, peterwilsoncc.
Fixes #45172.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/5.0/src/wp-admin/includes/meta-boxes.php

    r42219 r43837  
    12831283        endforeach;
    12841284}
     1285
     1286/**
     1287 * Registers the default post meta boxes, and runs the `do_meta_boxes` actions.
     1288 *
     1289 * @since 5.0.0
     1290 *
     1291 * @param WP_Post $post The post object that these meta boxes are being generated for.
     1292 */
     1293function register_and_do_post_meta_boxes( $post ) {
     1294        $post_type = $post->post_type;
     1295        $post_type_object = get_post_type_object( $post_type );
     1296
     1297        $thumbnail_support = current_theme_supports( 'post-thumbnails', $post_type ) && post_type_supports( $post_type, 'thumbnail' );
     1298        if ( ! $thumbnail_support && 'attachment' === $post_type && $post->post_mime_type ) {
     1299                if ( wp_attachment_is( 'audio', $post ) ) {
     1300                        $thumbnail_support = post_type_supports( 'attachment:audio', 'thumbnail' ) || current_theme_supports( 'post-thumbnails', 'attachment:audio' );
     1301                } elseif ( wp_attachment_is( 'video', $post ) ) {
     1302                        $thumbnail_support = post_type_supports( 'attachment:video', 'thumbnail' ) || current_theme_supports( 'post-thumbnails', 'attachment:video' );
     1303                }
     1304        }
     1305
     1306        $publish_callback_args = array( '__back_compat_meta_box' => true );
     1307        if ( post_type_supports($post_type, 'revisions') && 'auto-draft' != $post->post_status ) {
     1308                $revisions = wp_get_post_revisions( $post->ID );
     1309
     1310                // We should aim to show the revisions meta box only when there are revisions.
     1311                if ( count( $revisions ) > 1 ) {
     1312                        reset( $revisions ); // Reset pointer for key()
     1313                        $publish_callback_args = array( 'revisions_count' => count( $revisions ), 'revision_id' => key( $revisions ), '__back_compat_meta_box' => true );
     1314                        add_meta_box('revisionsdiv', __('Revisions'), 'post_revisions_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) );
     1315                }
     1316        }
     1317
     1318        if ( 'attachment' == $post_type ) {
     1319                wp_enqueue_script( 'image-edit' );
     1320                wp_enqueue_style( 'imgareaselect' );
     1321                add_meta_box( 'submitdiv', __('Save'), 'attachment_submit_meta_box', null, 'side', 'core', array( '__back_compat_meta_box' => true ) );
     1322                add_action( 'edit_form_after_title', 'edit_form_image_editor' );
     1323
     1324                if ( wp_attachment_is( 'audio', $post ) ) {
     1325                        add_meta_box( 'attachment-id3', __( 'Metadata' ), 'attachment_id3_data_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) );
     1326                }
     1327        } else {
     1328                add_meta_box( 'submitdiv', __( 'Publish' ), 'post_submit_meta_box', null, 'side', 'core', $publish_callback_args );
     1329        }
     1330
     1331        if ( current_theme_supports( 'post-formats' ) && post_type_supports( $post_type, 'post-formats' ) )
     1332                add_meta_box( 'formatdiv', _x( 'Format', 'post format' ), 'post_format_meta_box', null, 'side', 'core', array( '__back_compat_meta_box' => true ) );
     1333
     1334        // all taxonomies
     1335        foreach ( get_object_taxonomies( $post ) as $tax_name ) {
     1336                $taxonomy = get_taxonomy( $tax_name );
     1337                if ( ! $taxonomy->show_ui || false === $taxonomy->meta_box_cb )
     1338                        continue;
     1339
     1340                $label = $taxonomy->labels->name;
     1341
     1342                if ( ! is_taxonomy_hierarchical( $tax_name ) )
     1343                        $tax_meta_box_id = 'tagsdiv-' . $tax_name;
     1344                else
     1345                        $tax_meta_box_id = $tax_name . 'div';
     1346
     1347                add_meta_box( $tax_meta_box_id, $label, $taxonomy->meta_box_cb, null, 'side', 'core', array( 'taxonomy' => $tax_name, '__back_compat_meta_box' => true ) );
     1348        }
     1349
     1350        if ( post_type_supports( $post_type, 'page-attributes' ) || count( get_page_templates( $post ) ) > 0 ) {
     1351                add_meta_box( 'pageparentdiv', $post_type_object->labels->attributes, 'page_attributes_meta_box', null, 'side', 'core', array( '__back_compat_meta_box' => true ) );
     1352        }
     1353
     1354        if ( $thumbnail_support && current_user_can( 'upload_files' ) )
     1355                add_meta_box('postimagediv', esc_html( $post_type_object->labels->featured_image ), 'post_thumbnail_meta_box', null, 'side', 'low', array( '__back_compat_meta_box' => true ) );
     1356
     1357        if ( post_type_supports($post_type, 'excerpt') )
     1358                add_meta_box('postexcerpt', __('Excerpt'), 'post_excerpt_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) );
     1359
     1360        if ( post_type_supports($post_type, 'trackbacks') )
     1361                add_meta_box('trackbacksdiv', __('Send Trackbacks'), 'post_trackback_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) );
     1362
     1363        if ( post_type_supports($post_type, 'custom-fields') )
     1364                add_meta_box('postcustom', __('Custom Fields'), 'post_custom_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) );
     1365
     1366        /**
     1367         * Fires in the middle of built-in meta box registration.
     1368         *
     1369         * @since 2.1.0
     1370         * @deprecated 3.7.0 Use 'add_meta_boxes' instead.
     1371         *
     1372         * @param WP_Post $post Post object.
     1373         */
     1374        do_action( 'dbx_post_advanced', $post );
     1375
     1376        // Allow the Discussion meta box to show up if the post type supports comments,
     1377        // or if comments or pings are open.
     1378        if ( comments_open( $post ) || pings_open( $post ) || post_type_supports( $post_type, 'comments' ) ) {
     1379                add_meta_box( 'commentstatusdiv', __( 'Discussion' ), 'post_comment_status_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) );
     1380        }
     1381
     1382        $stati = get_post_stati( array( 'public' => true ) );
     1383        if ( empty( $stati ) ) {
     1384                $stati = array( 'publish' );
     1385        }
     1386        $stati[] = 'private';
     1387
     1388        if ( in_array( get_post_status( $post ), $stati ) ) {
     1389                // If the post type support comments, or the post has comments, allow the
     1390                // Comments meta box.
     1391                if ( comments_open( $post ) || pings_open( $post ) || $post->comment_count > 0 || post_type_supports( $post_type, 'comments' ) ) {
     1392                        add_meta_box( 'commentsdiv', __( 'Comments' ), 'post_comment_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) );
     1393                }
     1394        }
     1395
     1396        if ( ! ( 'pending' == get_post_status( $post ) && ! current_user_can( $post_type_object->cap->publish_posts ) ) )
     1397                add_meta_box('slugdiv', __('Slug'), 'post_slug_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) );
     1398
     1399        if ( post_type_supports( $post_type, 'author' ) && current_user_can( $post_type_object->cap->edit_others_posts ) ) {
     1400                add_meta_box( 'authordiv', __( 'Author' ), 'post_author_meta_box', null, 'normal', 'core', array( '__back_compat_meta_box' => true ) );
     1401        }
     1402
     1403        /**
     1404         * Fires after all built-in meta boxes have been added.
     1405         *
     1406         * @since 3.0.0
     1407         *
     1408         * @param string  $post_type Post type.
     1409         * @param WP_Post $post      Post object.
     1410         */
     1411        do_action( 'add_meta_boxes', $post_type, $post );
     1412
     1413        /**
     1414         * Fires after all built-in meta boxes have been added, contextually for the given post type.
     1415         *
     1416         * The dynamic portion of the hook, `$post_type`, refers to the post type of the post.
     1417         *
     1418         * @since 3.0.0
     1419         *
     1420         * @param WP_Post $post Post object.
     1421         */
     1422        do_action( "add_meta_boxes_{$post_type}", $post );
     1423
     1424        /**
     1425         * Fires after meta boxes have been added.
     1426         *
     1427         * Fires once for each of the default meta box contexts: normal, advanced, and side.
     1428         *
     1429         * @since 3.0.0
     1430         *
     1431         * @param string  $post_type Post type of the post.
     1432         * @param string  $context   string  Meta box context.
     1433         * @param WP_Post $post      Post object.
     1434         */
     1435        do_action( 'do_meta_boxes', $post_type, 'normal', $post );
     1436        /** This action is documented in wp-admin/includes/meta-boxes.php */
     1437        do_action( 'do_meta_boxes', $post_type, 'advanced', $post );
     1438        /** This action is documented in wp-admin/includes/meta-boxes.php */
     1439        do_action( 'do_meta_boxes', $post_type, 'side', $post );
     1440}
Note: See TracChangeset for help on using the changeset viewer.