Как использовать Meta Box для создания настроек в WordPress

Meta Box — это мощный инструмент для добавления настраиваемых полей и метаданных к записям, страницам и другим типам контента в WordPress. В этой статье мы подробно разберём, как использовать Meta Box для создания пользовательских настроек, которые помогут расширить функционал вашего сайта или темы.

Что такое Meta Box и зачем он нужен в WordPress

Meta Box — это дополнительный блок в админке WordPress, который позволяет добавлять поля ввода, чекбоксы, селекты и другие элементы управления для хранения дополнительных данных. Это удобно, когда нужно расширить стандартный функционал без создания полноценного плагина или темы.

Использование Meta Box помогает:

  • Добавлять уникальные настройки для записей, страниц, терминов и пользователей.
  • Управлять дополнительными данными, которые не входят в стандартный набор полей WordPress.
  • Создавать удобные интерфейсы для администраторов и редакторов.

Для работы с Meta Box можно использовать как готовые плагины (например, Meta Box plugin), так и писать собственные решения с использованием хуков и функций WordPress.

Создание простого Meta Box с помощью кода

Рассмотрим пример, как самостоятельно создать Meta Box в админке для записи типа 'post'. Для этого используем хуки add_meta_boxes и save_post.

Добавим следующий код в файл functions.php вашей темы или в отдельный плагин:

function wordpressa_add_custom_meta_box() {
    add_meta_box(
        'wordpressa_custom_meta',          // ID метабокса
        'Дополнительные настройки',       // Заголовок
        'wordpressa_custom_meta_box_html', // Функция вывода HTML
        'post',                           // Тип записи
        'normal',                         // Расположение
        'high'                            // Приоритет
    );
}
add_action('add_meta_boxes', 'wordpressa_add_custom_meta_box');

function wordpressa_custom_meta_box_html($post) {
    $value = get_post_meta($post->ID, '_wordpressa_custom_field', true);
    wp_nonce_field('wordpressa_custom_nonce_action', 'wordpressa_custom_nonce');
    echo '<label for="wordpressa_custom_field">Введите дополнительное значение:</label>';
    echo '<input type="text" id="wordpressa_custom_field" name="wordpressa_custom_field" value="' . esc_attr($value) . '" style="width:100%;" />';
}

function wordpressa_save_custom_meta_box($post_id) {
    if (!isset($_POST['wordpressa_custom_nonce']) || !wp_verify_nonce($_POST['wordpressa_custom_nonce'], 'wordpressa_custom_nonce_action')) {
        return;
    }
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    if (!current_user_can('edit_post', $post_id)) {
        return;
    }
    if (isset($_POST['wordpressa_custom_field'])) {
        update_post_meta($post_id, '_wordpressa_custom_field', sanitize_text_field($_POST['wordpressa_custom_field']));
    }
}
add_action('save_post', 'wordpressa_save_custom_meta_box');

В этом коде мы регистрируем метабокс с полем для ввода текста, сохраняем данные и проверяем безопасность через nonce. Это базовый шаблон для создания собственных meta box.

Расширение Meta Box: добавление разных типов полей

В реальных проектах часто нужны не только текстовые поля, но и другие типы: textarea, checkbox, select, datepicker и др. Ниже пример расширенного Meta Box с разными типами полей:

function wordpressa_add_advanced_meta_box() {
    add_meta_box(
        'wordpressa_advanced_meta',
        'Расширенные настройки',
        'wordpressa_advanced_meta_box_html',
        ['post', 'page'],
        'advanced',
        'default'
    );
}
add_action('add_meta_boxes', 'wordpressa_add_advanced_meta_box');

function wordpressa_advanced_meta_box_html($post) {
    $text = get_post_meta($post->ID, '_wordpressa_text', true);
    $textarea = get_post_meta($post->ID, '_wordpressa_textarea', true);
    $checkbox = get_post_meta($post->ID, '_wordpressa_checkbox', true);
    $select = get_post_meta($post->ID, '_wordpressa_select', true);
    wp_nonce_field('wordpressa_advanced_nonce_action', 'wordpressa_advanced_nonce');
    echo '<p><label>Текстовое поле:<br><input type="text" name="wordpressa_text" value="' . esc_attr($text) . '" style="width:100%;" /></label></p>';
    echo '<p><label>Текстовая область:<br><textarea name="wordpressa_textarea" style="width:100%;height:80px;">' . esc_textarea($textarea) . '</textarea></label></p>';
    echo '<p><label><input type="checkbox" name="wordpressa_checkbox" value="1" ' . checked(1, $checkbox, false) . ' /> Включить опцию</label></p>';
    echo '<p><label>Выберите значение:<br><select name="wordpressa_select">';
    $options = ['option1' => 'Опция 1', 'option2' => 'Опция 2', 'option3' => 'Опция 3'];
    foreach ($options as $value => $label) {
        echo '<option value="' . esc_attr($value) . '" ' . selected($select, $value, false) . '>' . esc_html($label) . '</option>';
    }
    echo '</select></label></p>';
}

function wordpressa_save_advanced_meta_box($post_id) {
    if (!isset($_POST['wordpressa_advanced_nonce']) || !wp_verify_nonce($_POST['wordpressa_advanced_nonce'], 'wordpressa_advanced_nonce_action')) {
        return;
    }
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    if (!current_user_can('edit_post', $post_id)) {
        return;
    }
    update_post_meta($post_id, '_wordpressa_text', sanitize_text_field($_POST['wordpressa_text'] ?? ''));
    update_post_meta($post_id, '_wordpressa_textarea', sanitize_textarea_field($_POST['wordpressa_textarea'] ?? ''));
    update_post_meta($post_id, '_wordpressa_checkbox', isset($_POST['wordpressa_checkbox']) ? 1 : 0);
    $allowed_select = ['option1', 'option2', 'option3'];
    $select_value = $_POST['wordpressa_select'] ?? '';
    if (in_array($select_value, $allowed_select, true)) {
        update_post_meta($post_id, '_wordpressa_select', $select_value);
    }
}
add_action('save_post', 'wordpressa_save_advanced_meta_box');

Такой подход позволяет создавать гибкие формы с разными типами полей без использования сторонних плагинов.

Использование плагина Meta Box для быстрого создания и управления

Если вы не хотите писать код, можно воспользоваться популярным плагином Meta Box. Он предлагает удобный интерфейс, множество расширений и готовые шаблоны.

Преимущества плагина:

  • Графический интерфейс для создания полей.
  • Поддержка разных типов полей и повторяющихся групп.
  • Совместимость с популярными конструкторами и темами.
  • Расширения для сложных задач — слайдеры, карты, галереи и др.

Для начала работы после установки плагина можно описать поля в PHP или через интерфейс:

add_filter('rwmb_meta_boxes', 'wordpressa_register_meta_boxes');
function wordpressa_register_meta_boxes($meta_boxes) {
    $meta_boxes[] = [
        'title'      => 'Параметры записи',
        'post_types' => ['post'],
        'fields'     => [
            [
                'id'   => 'wordpressa_mb_text',
                'name' => 'Текстовое поле',
                'type' => 'text',
            ],
            [
                'id'   => 'wordpressa_mb_checkbox',
                'name' => 'Чекбокс',
                'type' => 'checkbox',
            ],
        ],
    ];
    return $meta_boxes;
}

Практические советы и оптимизация Meta Box

Безопасность и валидация данных

Обязательно используйте nonce для проверки легитимности запроса при сохранении данных. Также фильтруйте и экранируйте все входящие данные — для текста используйте sanitize_text_field(), для textarea — sanitize_textarea_field(), для чисел — intval() и т.д.

Производительность

Избегайте избыточных запросов к базе данных. Для вывода нескольких метаполей используйте get_post_meta($post_id) с третьим параметром false для получения всех метаданных сразу и кешируйте результаты, если требуется.

Интеграция с темами и плагинами

Если вы создаёте Meta Box для настроек темы, рекомендуем использовать опции темы и функции get_theme_mod(). Для сложных проектов можно объединять Meta Box с REST API и AJAX для динамического обновления данных без перезагрузки страницы.

Заключение: зачем использовать Meta Box в WordPress

Meta Box — это гибкий способ расширить функционал сайта на WordPress, добавляя любые необходимые поля и настройки. Благодаря простоте реализации и широким возможностям, он востребован как у новичков, так и у опытных разработчиков.

Для удобства и ускорения разработки рекомендуем использовать плагин Meta Box от WPShop, который поддерживает множество типов полей и легко интегрируется в проекты любой сложности.

Как использовать хуки WordPress для изменения вывода WooCommerce
24.04.2026
Как создать многоуровневую навигацию в WordPress без плагинов
01.01.2026
Как автоматически удалять заказы WooCommerce после отмены или возврата оплаты
28.04.2026
Как избежать конфликтов между плагинами в WordPress
20.12.2025
WooCommerce: как отменить заказ после оплаты с помощью кода
05.06.2026