## ADD_META_BOX() │ WP 2.5.0
Функция add_meta_box
позволяет добавлять метапанели на один или несколько экранов в WordPress.
### Используется в
- wp_nav_menu_taxonomy_meta_boxes()
- wp_nav_menu_post_type_meta_boxes()
- wp_add_dashboard_widget()
### Возвращаемое значение
- null
: Ничего не возвращает (null).
### Синтаксис
```php
add_meta_box( $id, $title, $callback, $screen, $context, $priority, $callback_args );
Параметры
- $id (string) (обязательный): Идентификатор метапанели (используется в атрибуте 'id').
- $title (string) (обязательный): Название метапанели.
- $callback (callable) (обязательный): Функция, которая заполняет панель нужным содержимым. Эта функция должна выводить результат с помощью
echo
. - $screen (string|array|WP_Screen): Экран или экраны, на которых будет отображаться панель (например, для ��ипа поста, 'link' или 'comment'). Принимает один идентификатор экрана, объект
WP_Screen
или массив идентификаторов экранов. Если вы создаёте новый экран с помощьюadd_menu_page()
илиadd_submenu_page()
, убедитесь, что ваш слаг меню соответствует ограничениямsanitize_key()
, иначе меню может неправильно отображаться на странице. По умолчанию: текущий экран. - $context (string): Контекст на экране, в котором панель должна отображаться. Доступные контексты зависят от экрана. Например, для экранов редактирования постов доступны контексты 'normal', 'side' и 'advanced'. По умолчанию: 'advanced'.
- $priority (string): Приоритет в контексте, где панель должна отображаться. Принимает 'high', 'core', 'default' или 'low'. По умолчанию: 'default'.
- $callback_args (array): Данные, которые должны быть установлены как
$args
для массива панели (это второй параметр, передаваемый в вашу функцию обратного вызова). По умолчанию: null.
Примеры
Пример 1: Отображение метапанели в особом месте
Этот пример показывает, как вывести метапанель в особом месте: сразу после поля заголовка. Для этого установите своё значение для параметра $context
, а затем выведите его с помощью хука edit_form_after_title
.
add_meta_box( 'my-meta-box', 'Моя метапанель', 'my_meta_box_callback', null, 'my_custom_context', 'high' );
add_action( 'edit_form_after_title', 'show_custom_meatbox' );
function show_custom_meatbox( $post ) {
do_meta_boxes( null, 'my_custom_context', $post );
}
Пример 2: Новый элемент аккордеона
Этот пример добавляет дополнительный элемент аккордеона на страницу настроек меню WordPress.
add_action( 'admin_head-nav-menus.php', 'register_my_meta_box_accordion_nav_menus' );
function register_my_meta_box_accordion_nav_menus() {
add_meta_box( 'my-custom-meta-box', 'Моя метапанель', 'render_my_meta_box_accordion_nav_menus', 'nav-menus', 'side' );
}
function render_my_meta_box_accordion_nav_menus() {
?>
Пример 3: Использование класса PHP для метапанели
Этот пример показывает, как добавить дополнительный блок в стиле ООП:
function call_someClass() {
new someClass();
}
if ( is_admin() ) {
add_action( 'load-post.php', 'call_someClass' );
add_action( 'load-post-new.php', 'call_someClass' );
}
class someClass {
public function __construct() {
add_action( 'add_meta_boxes', array( $this, 'add_meta_box' ) );
add_action( 'save_post', array( $this, 'save' ) );
}
public function add_meta_box( $post_type ) {
$post_types = array('post', 'page');
if ( in_array( $post_type, $post_types )) {
add_meta_box(
'some_meta_box_name',
__( 'Заголовок метапанели', 'myplugin_textdomain' ),
array( $this, 'render_meta_box_content' ),
$post_type,
'advanced',
'high',
);
}
}
public function save( $post_id ) {
if ( ! isset( $_POST['myplugin_inner_custom_box_nonce'] ) )
return $post_id;
$nonce = $_POST['myplugin_inner_custom_box_nonce'];
if ( ! wp_verify_nonce( $nonce, 'myplugin_inner_custom_box' ) )
return $post_id;
if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE )
return $post_id;
if ( 'page' == $_POST['post_type'] ) {
if ( ! current_user_can( 'edit_page', $post_id ) )
return $post_id;
} else {
if ( ! current_user_can( 'edit_post', $post_id ) )
return $post_id;
}
$mydata = sanitize_text_field( $_POST['myplugin_new_field'] );
update_post_meta( $post_id, '_my_meta_value_key', $mydata );
}
public function render_meta_box_content( $post ) {
wp_nonce_field( 'myplugin_inner_custom_box', 'myplugin_inner_custom_box_nonce' );
$value = get_post_meta( $post->ID, '_my_meta_value_key', true );
echo ' ';
echo '';
}
}
Примечания
- Глобальная переменная:
$wp_meta_boxes
– глобальное состояние метапанелей.
Изменения
- С 2.5.0: Введена функция.
- С 4.4.0: Параметр
$screen
теперь принимает массив идентификаторов экранов.