Функция add_meta_box() в WordPress: синтаксис, параметры и примеры использования

## 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 );

Параметры

  1. $id (string) (обязательный): Идентификатор метапанели (используется в атрибуте 'id').
  2. $title (string) (обязательный): Название метапанели.
  3. $callback (callable) (обязательный): Функция, которая заполняет панель нужным содержимым. Эта функция должна выводить результат с помощью echo.
  4. $screen (string|array|WP_Screen): Экран или экраны, на которых будет отображаться панель (например, для ��ипа поста, 'link' или 'comment'). Принимает один идентификатор экрана, объект WP_Screen или массив идентификаторов экранов. Если вы создаёте новый экран с помощью add_menu_page() или add_submenu_page(), убедитесь, что ваш слаг меню соответствует ограничениям sanitize_key(), иначе меню может неправильно отображаться на странице. По умолчанию: текущий экран.
  5. $context (string): Контекст на экране, в котором панель должна отображаться. Доступные контексты зависят от экрана. Например, для экранов редактирования постов доступны контексты 'normal', 'side' и 'advanced'. По умолчанию: 'advanced'.
  6. $priority (string): Приоритет в контексте, где панель должна отображаться. Принимает 'high', 'core', 'default' или 'low'. По умолчанию: 'default'.
  7. $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 теперь принимает массив идентификаторов экранов.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *