do_meta_boxes( string|WP_Screen $screen, string $context, mixed $object )
Meta-Box template function.
Description Description
Parameters Parameters
- $screen
-
(string|WP_Screen) (Required) Screen identifier. If you have used add_menu_page() or add_submenu_page() to create a new screen (and hence screen_id) make sure your menu slug conforms to the limits of sanitize_key() otherwise the 'screen' menu may not correctly render on your page.
- $context
-
(string) (Required) The screen context for which to display meta boxes.
- $object
-
(mixed) (Required) Gets passed to the first parameter of the meta box callback function. Often this is the object that's the focus of the current screen, for example a
WP_Post
orWP_Comment
object.
Return Return
(int) number of meta_boxes
Source Source
File: wp-admin/includes/template.php
function do_meta_boxes( $screen, $context, $object ) { global $wp_meta_boxes; static $already_sorted = false; if ( empty( $screen ) ) { $screen = get_current_screen(); } elseif ( is_string( $screen ) ) { $screen = convert_to_screen( $screen ); } $page = $screen->id; $hidden = get_hidden_meta_boxes( $screen ); printf( '<div id="%s-sortables" class="meta-box-sortables">', esc_attr( $context ) ); // Grab the ones the user has manually sorted. Pull them out of their previous context/priority and into the one the user chose if ( ! $already_sorted && $sorted = get_user_option( "meta-box-order_$page" ) ) { foreach ( $sorted as $box_context => $ids ) { foreach ( explode( ',', $ids ) as $id ) { if ( $id && 'dashboard_browser_nag' !== $id ) { add_meta_box( $id, null, null, $screen, $box_context, 'sorted' ); } } } } $already_sorted = true; $i = 0; if ( isset( $wp_meta_boxes[ $page ][ $context ] ) ) { foreach ( array( 'high', 'sorted', 'core', 'default', 'low' ) as $priority ) { if ( isset( $wp_meta_boxes[ $page ][ $context ][ $priority ] ) ) { foreach ( (array) $wp_meta_boxes[ $page ][ $context ][ $priority ] as $box ) { if ( false == $box || ! $box['title'] ) { continue; } $block_compatible = true; if ( is_array( $box['args'] ) ) { // If a meta box is just here for back compat, don't show it in the block editor. if ( $screen->is_block_editor() && isset( $box['args']['__back_compat_meta_box'] ) && $box['args']['__back_compat_meta_box'] ) { continue; } if ( isset( $box['args']['__block_editor_compatible_meta_box'] ) ) { $block_compatible = (bool) $box['args']['__block_editor_compatible_meta_box']; unset( $box['args']['__block_editor_compatible_meta_box'] ); } // If the meta box is declared as incompatible with the block editor, override the callback function. if ( ! $block_compatible && $screen->is_block_editor() ) { $box['old_callback'] = $box['callback']; $box['callback'] = 'do_block_editor_incompatible_meta_box'; } if ( isset( $box['args']['__back_compat_meta_box'] ) ) { $block_compatible = $block_compatible || (bool) $box['args']['__back_compat_meta_box']; unset( $box['args']['__back_compat_meta_box'] ); } } $i++; // get_hidden_meta_boxes() doesn't apply in the block editor. $hidden_class = ( ! $screen->is_block_editor() && in_array( $box['id'], $hidden ) ) ? ' hide-if-js' : ''; echo '<div id="' . $box['id'] . '" class="postbox ' . postbox_classes( $box['id'], $page ) . $hidden_class . '" ' . '>' . "\n"; if ( 'dashboard_browser_nag' != $box['id'] ) { $widget_title = $box['title']; if ( is_array( $box['args'] ) && isset( $box['args']['__widget_basename'] ) ) { $widget_title = $box['args']['__widget_basename']; // Do not pass this parameter to the user callback function. unset( $box['args']['__widget_basename'] ); } echo '<button type="button" class="handlediv" aria-expanded="true">'; echo '<span class="screen-reader-text">' . sprintf( __( 'Toggle panel: %s' ), $widget_title ) . '</span>'; echo '<span class="toggle-indicator" aria-hidden="true"></span>'; echo '</button>'; } echo '<h2 class="hndle">'; if ( 'dashboard_php_nag' === $box['id'] ) { echo '<span aria-hidden="true" class="dashicons dashicons-warning"></span>'; echo '<span class="screen-reader-text">' . __( 'Warning:' ) . ' </span>'; } echo "<span>{$box['title']}</span>"; echo "</h2>\n"; echo '<div class="inside">' . "\n"; if ( WP_DEBUG && ! $block_compatible && 'edit' === $screen->parent_base && ! $screen->is_block_editor() && ! isset( $_GET['meta-box-loader'] ) ) { $plugin = _get_plugin_from_callback( $box['callback'] ); if ( $plugin ) { ?> <div class="error inline"> <p> <?php /* translators: %s: the name of the plugin that generated this meta box. */ printf( __( "This meta box, from the %s plugin, isn't compatible with the block editor." ), "<strong>{$plugin['Name']}</strong>" ); ?> </p> </div> <?php } } call_user_func( $box['callback'], $object, $box ); echo "</div>\n"; echo "</div>\n"; } } } } echo '</div>'; return $i; }
Expand full source code Collapse full source code View on Trac
Changelog Changelog
Version | Description |
---|---|
2.5.0 | Introduced. |
User Contributed Notes User Contributed Notes
You must log in before being able to contribute a note or feedback.
When wanting to change the order of metaboxes there is an undocumented (I could not find it at WP.org) filter you can use.
get_user_option_meta-box-order_[CUSTOM_POST_TYPE]
it will have 1 parameter, the $order array.
For example for the CPT named posts
get_user_option_meta-box-order_post
This is an example to re-order metaboxes (note that this example might differ from your metaboxes)
Expand full source codeCollapse full source code
Source: http://wordpress.stackexchange.com/questions/25793/how-to-force-one-column-layout-on-custom-post-type-edit-page/25814#25814
This is how you can register a new meta box, then outputs that meta box using this do_meta_boxes function:
Expand full source codeCollapse full source code
Worth mentioning that the ‘get_user_option_meta-box-order_post’ hook referenced in @ramon fincken’s example is “undocumented” only because it’s a dynamic hook, specifically the get_user_option_{$option} hook, where “meta-box-order” is a specific user option. Cool tip though :-)
Example
Here is an example that uses add_meta_box to register a new meta box, then outputs that meta box using this do_meta_boxes function: