向一个或多个屏幕添加元框。

原型

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 )

参数

$id (string) (Required) 元框ID(用于元框的’id’属性)。

$title (string) (Required) 元框的标题。

$callback (callable) (Required) 用所需内容填充框的功能。该函数应该回显其输出。

$screen (string|array|WP_Screen) (Optional)  显示框的屏幕或屏幕(例如帖子类型,“链接”或“评论”)。接受单个屏幕ID,WP_Screen对象或屏幕ID数组。默认为当前屏幕。如果你使用add_menu_page()或add_submenu_page()来创建新屏幕(以及screen_id),请确保你的菜单slug符合sanitize_key()的限制,否则“屏幕”菜单可能无法在你的页面上正确呈现。

$context (string) (Optional)  屏幕中应显示框的上下文。可用的上下文因屏幕而异。后期编辑屏幕上下文包括“正常”,“侧面”和“高级”。评论屏幕上下文包括“正常”和“侧面”。菜单元框(手风琴部分)都使用“侧面”上下文。全球

$priority (string) (Optional)  框应显示的上下文中的优先级(“高”,“低”)。

$callback_args (array) (Optional)  应设置为box数组的$ args属性的数据(这是传递给回调的第二个参数)。

源文件

路径:wp-admin/includes/template.php

<?php
...
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 added or removed by a plugin, don't add.
			if ( 'core' == $priority ) {
				// If core box previously deleted, don't add
				if ( false === $wp_meta_boxes[$page][$a_context][$a_priority][$id] )
					return;
				/*
				 * If 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);
}
...
?>

其他

英文文档:https://developer.wordpress.org/reference/functions/add_meta_box/