On this page
add_meta_box( string $id, string $title, callable $callback, string|array|WP_Screen $screen = null, string $context = 'advanced', string $priority = 'default', array $callback_args = null )
Adds a meta box to one or more screens.
Parameters
$idstring Required-
Meta box ID (used in the
'id'attribute for the meta box). $titlestring Required-
Title of the meta box.
$callbackcallable Required-
Function that fills the box with the desired content.
The function should echo its output. $screenstring|array|WP_Screen Optional-
The screen or screens on which to show the box (such as a post type,
'link', or'comment'). Accepts a single screen ID, WP_Screen object, or array of screen IDs. Default is the current screen. 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.Default:
null $contextstring Optional-
The context within the screen where the box should display. Available contexts vary from screen to screen. Post edit screen contexts include
'normal','side', and'advanced'. Comments screen contexts include'normal'and'side'. Menus meta boxes (accordion sections) all use the'side'context. Global default is'advanced'.Default:
'advanced' $prioritystring Optional-
The priority within the context where the box should show.
Accepts'high','core','default', or'low'. Default'default'.Default:
'default' $callback_argsarray Optional-
Data that should be set as the $args property of the box array (which is the second parameter passed to your callback).
Default:
null
Source
File: wp-admin/includes/template.php. View all references
function add_meta_box( $id, $title, $callback, $screen = null, $context = 'advanced', $priority = 'default', $callback_args = null ) {
global $wp_meta_boxes;
if ( empty( $screen ) ) {
$screen = get_current_screen();
} elseif ( is_string( $screen ) ) {
$screen = convert_to_screen( $screen );
} elseif ( is_array( $screen ) ) {
foreach ( $screen as $single_screen ) {
add_meta_box( $id, $title, $callback, $single_screen, $context, $priority, $callback_args );
}
}
if ( ! isset( $screen->id ) ) {
return;
}
$page = $screen->id;
if ( ! isset( $wp_meta_boxes ) ) {
$wp_meta_boxes = array();
}
if ( ! isset( $wp_meta_boxes[ $page ] ) ) {
$wp_meta_boxes[ $page ] = array();
}
if ( ! isset( $wp_meta_boxes[ $page ][ $context ] ) ) {
$wp_meta_boxes[ $page ][ $context ] = array();
}
foreach ( array_keys( $wp_meta_boxes[ $page ] ) as $a_context ) {
foreach ( array( 'high', 'core', 'default', 'low' ) as $a_priority ) {
if ( ! isset( $wp_meta_boxes[ $page ][ $a_context ][ $a_priority ][ $id ] ) ) {
continue;
}
// If a core box was previously removed, don't add.
if ( ( 'core' === $priority || 'sorted' === $priority )
&& false === $wp_meta_boxes[ $page ][ $a_context ][ $a_priority ][ $id ]
) {
return;
}
// If a core box was previously added by a plugin, don't add.
if ( 'core' === $priority ) {
/*
* If the box was added with default priority, give it core priority
* to maintain sort order.
*/
if ( 'default' === $a_priority ) {
$wp_meta_boxes[ $page ][ $a_context ]['core'][ $id ] = $wp_meta_boxes[ $page ][ $a_context ]['default'][ $id ];
unset( $wp_meta_boxes[ $page ][ $a_context ]['default'][ $id ] );
}
return;
}
// If no priority given and ID already present, use existing priority.
if ( empty( $priority ) ) {
$priority = $a_priority;
/*
* Else, if we're adding to the sorted priority, we don't know the title
* or callback. Grab them from the previously added context/priority.
*/
} elseif ( 'sorted' === $priority ) {
$title = $wp_meta_boxes[ $page ][ $a_context ][ $a_priority ][ $id ]['title'];
$callback = $wp_meta_boxes[ $page ][ $a_context ][ $a_priority ][ $id ]['callback'];
$callback_args = $wp_meta_boxes[ $page ][ $a_context ][ $a_priority ][ $id ]['args'];
}
// An ID can be in only one priority and one context.
if ( $priority !== $a_priority || $context !== $a_context ) {
unset( $wp_meta_boxes[ $page ][ $a_context ][ $a_priority ][ $id ] );
}
}
}
if ( empty( $priority ) ) {
$priority = 'low';
}
if ( ! isset( $wp_meta_boxes[ $page ][ $context ][ $priority ] ) ) {
$wp_meta_boxes[ $page ][ $context ][ $priority ] = array();
}
$wp_meta_boxes[ $page ][ $context ][ $priority ][ $id ] = array(
'id' => $id,
'title' => $title,
'callback' => $callback,
'args' => $callback_args,
);
}
Related
Uses
| Uses | Description |
|---|---|
| get_current_screen() wp-admin/includes/screen.php | Get the current screen object |
| convert_to_screen() wp-admin/includes/template.php | Converts a screen string to a screen object. |
| add_meta_box() wp-admin/includes/template.php | Adds a meta box to one or more screens. |
Used By
| Used By | Description |
|---|---|
| register_and_do_post_meta_boxes() wp-admin/includes/meta-boxes.php | Registers the default post meta boxes, and runs the |
| wp_add_dashboard_widget() wp-admin/includes/dashboard.php | Adds a new dashboard widget. |
| add_meta_box() wp-admin/includes/template.php | Adds a meta box to one or more screens. |
| do_meta_boxes() wp-admin/includes/template.php | Meta-Box template function. |
| wp_nav_menu_setup() wp-admin/includes/nav-menu.php | Register nav menu meta boxes and advanced menu items. |
| wp_nav_menu_post_type_meta_boxes() wp-admin/includes/nav-menu.php | Creates meta boxes for any post type menu item. |
| wp_nav_menu_taxonomy_meta_boxes() wp-admin/includes/nav-menu.php | Creates meta boxes for any taxonomy menu item. |
Changelog
© 2003–2022 WordPress Foundation
Licensed under the GNU GPLv2+ License.
https://developer.wordpress.org/reference/functions/add_meta_box