WordPress.org

Make WordPress Core


Ignore:
Timestamp:
10/29/2018 02:42:23 AM (15 months 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.