Как создать собственный метабокс в WordPress

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

Что такое метабоксы и зачем они нужны в WordPress

Метабоксы — это блоки в редакторе записи, которые позволяют вводить дополнительную информацию, не входящую в стандартный набор полей. Например, если вы создаете сайт с обзорами товаров, можно добавить метабокс для рейтинга, цены или характеристик.

Создание собственных метабоксов помогает сделать интерфейс удобнее и структурировать данные, что в дальнейшем позволит легко использовать их в шаблонах темы или плагина.

WordPress предоставляет удобный API для создания метабоксов через функции add_meta_box() и сохранения данных через хуки save_post.

Создание простого метабокса шаг за шагом

Регистрация метабокса

Для начала нужно зарегистрировать метабокс, используя хук add_meta_boxes. В функции регистрации вызывается add_meta_box(), где указываются ID, заголовок, колбек для вывода HTML, тип записи и расположение.

function wpcommunity_add_custom_metabox() {
    add_meta_box(
        'wpcommunity_metabox_id',
        'Дополнительные настройки поста',
        'wpcommunity_render_metabox',
        'post',
        'normal',
        'high'
    );
}
add_action('add_meta_boxes', 'wpcommunity_add_custom_metabox');

Здесь мы добавляем метабокс для стандартного типа записи post. Вы можете изменить это на page или кастомный тип записи.

Вывод полей метабокса

Следующий шаг — реализовать функцию wpcommunity_render_metabox, которая выведет HTML для ввода данных. Обычно это форма с полями ввода или селекторами.

function wpcommunity_render_metabox($post) {
    // Получаем существующее значение, если есть
    $value = get_post_meta($post->ID, '_wpcommunity_custom_field', true);
    // Защита от CSRF
    wp_nonce_field('wpcommunity_metabox_nonce_action', 'wpcommunity_metabox_nonce');
    ?>
    <label for="wpcommunity_custom_field">Введите дополнительную информацию:</label>
    <input type="text" id="wpcommunity_custom_field" name="wpcommunity_custom_field" value="<?php echo esc_attr($value); ?>" size="25" />
    <?php
}

Обратите внимание на функцию wp_nonce_field() — она нужна для безопасности при сохранении данных.

Сохранение данных из метабокса

Чтобы сохранить введённые данные, нужно обработать их при сохранении записи. Для этого используем хук save_post.

function wpcommunity_save_metabox_data($post_id) {
    // Проверяем nonce
    if (!isset($_POST['wpcommunity_metabox_nonce']) || !wp_verify_nonce($_POST['wpcommunity_metabox_nonce'], 'wpcommunity_metabox_nonce_action')) {
        return;
    }

    // Проверяем права
    if (!current_user_can('edit_post', $post_id)) {
        return;
    }

    // Проверяем, что данные пришли
    if (isset($_POST['wpcommunity_custom_field'])) {
        $data = sanitize_text_field($_POST['wpcommunity_custom_field']);
        update_post_meta($post_id, '_wpcommunity_custom_field', $data);
    }
}
add_action('save_post', 'wpcommunity_save_metabox_data');

В этом коде происходит проверка nonce и прав пользователя, а затем данные сохраняются в метаполе с уникальным ключом.

Использование сохранённых данных в шаблонах

Чтобы вывести сохранённые данные на сайте, используйте функцию get_post_meta() внутри шаблона темы.

$custom_field = get_post_meta(get_the_ID(), '_wpcommunity_custom_field', true);
if ($custom_field) {
    echo '<p>Дополнительная информация: ' . esc_html($custom_field) . '</p>';
}

Таким образом, вы можете динамически отображать пользовательские данные, введённые в метабоксе, в любом месте шаблона.

Расширение метабокса: добавляем несколько полей

Часто требуется добавить не одно, а несколько полей. Например, текстовое поле, чекбокс и селектор. В этом случае расширяем функцию вывода и сохранения:

function wpcommunity_render_metabox($post) {
    $text = get_post_meta($post->ID, '_wpcommunity_text', true);
    $checkbox = get_post_meta($post->ID, '_wpcommunity_checkbox', true);
    $select = get_post_meta($post->ID, '_wpcommunity_select', true);

    wp_nonce_field('wpcommunity_metabox_nonce_action', 'wpcommunity_metabox_nonce');
    ?>
    <p><label for="wpcommunity_text">Текстовое поле:</label><br />
    <input type="text" id="wpcommunity_text" name="wpcommunity_text" value="<?php echo esc_attr($text); ?>" size="30" /></p>

    <p><label><input type="checkbox" name="wpcommunity_checkbox" value="1" <?php checked( $checkbox, '1' ); ?> /> Включить опцию</label></p>

    <p><label for="wpcommunity_select">Выберите опцию:</label><br />
    <select id="wpcommunity_select" name="wpcommunity_select">
        <option value="" <?php selected( $select, '' ); ?>>Выберите...</option>
        <option value="one" <?php selected( $select, 'one' ); ?>>Первый</option>
        <option value="two" <?php selected( $select, 'two' ); ?>>Второй</option>
    </select></p>
    <?php
}

function wpcommunity_save_metabox_data($post_id) {
    if (!isset($_POST['wpcommunity_metabox_nonce']) || !wp_verify_nonce($_POST['wpcommunity_metabox_nonce'], 'wpcommunity_metabox_nonce_action')) {
        return;
    }
    if (!current_user_can('edit_post', $post_id)) {
        return;
    }

    if (isset($_POST['wpcommunity_text'])) {
        update_post_meta($post_id, '_wpcommunity_text', sanitize_text_field($_POST['wpcommunity_text']));
    }
    $checkbox_value = isset($_POST['wpcommunity_checkbox']) ? '1' : '0';
    update_post_meta($post_id, '_wpcommunity_checkbox', $checkbox_value);

    if (isset($_POST['wpcommunity_select'])) {
        update_post_meta($post_id, '_wpcommunity_select', sanitize_text_field($_POST['wpcommunity_select']));
    }
}
add_action('save_post', 'wpcommunity_save_metabox_data');

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

Использование плагинов для метабоксов: плюсы и минусы

Если вы не хотите писать код вручную, можно воспользоваться плагинами для создания метабоксов, например:

  • Advanced Custom Fields (ACF) — самый популярный, позволяет создавать удобный интерфейс для любых типов полей.
  • Meta Box — мощный и гибкий инструмент с поддержкой различных типов данных и условий отображения.
  • CMB2 — бесплатный и открытый фреймворк для метабоксов, который легко расширяется.

Преимущество плагинов — скорость и простота настройки без необходимости писать много кода. Однако, если нужна максимальная оптимизация и контроль, то собственный код предпочтительнее.

Заключение и рекомендации по созданию метабоксов

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

Всегда следите за безопасностью — используйте nonce и проверяйте права пользователя перед сохранением данных. Не забывайте обрабатывать и фильтровать ввод, чтобы избежать XSS и других уязвимостей.

Выбирайте подходящий способ создания метабоксов: собственный код для максимальной гибкости или проверенные плагины для быстрого результата.

Удаление пустых записей в termmeta WordPress: оптимизация базы данных
09.12.2025
Как создать автоматическую систему удаления нерабочих шорткодов в WordPress
08.03.2026
Как создать настройки плагина в WordPress
10.11.2025
Как автоматизировать удаление неиспользуемых купонов в WooCommerce
21.05.2026
Как избежать проблем с отправкой писем с WordPress через SMTP
06.06.2026

Задать вопрос о вордпресс, получить ответ - это все можно сделать в нашем сообществе WP. Сайт в данный момент в разработке, изучите ссылки ниже: