Как добавить динамические поля в WordPress без плагинов

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

Что такое динамические поля и зачем они нужны в WordPress

Динамические поля — это произвольные поля (custom fields), которые позволяют добавлять к записи или странице уникальные данные, не предусмотренные в стандартном наборе полей WordPress. Например, для сайта с каталогом товаров это может быть цена, артикул, цвет и другие параметры. Для блога — информация об авторе, рейтинг, дата события и многое другое.

Использование динамических полей позволяет сделать сайт более гибким и настраиваемым без необходимости создавать отдельные таблицы в базе данных. WordPress хранит эти данные в таблице wp_postmeta, что упрощает взаимодействие с ними.

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

Создание метабоксов для динамических полей в админке WordPress

Регистрация метабокса через хук add_meta_boxes

Для начала нам нужно создать метабокс — область в редакторе записи или страницы, где пользователь сможет вводить значения для динамических полей. Это делается с помощью функции add_meta_box, которую мы подключаем через хук add_meta_boxes.

Ниже пример функции wpfront_add_custom_meta_box, которая добавляет метабокс к записям:

function wpfront_add_custom_meta_box() {
    add_meta_box(
        'wpfront_dynamic_fields',
        'Дополнительные данные',
        'wpfront_render_meta_box',
        'post',
        'normal',
        'default'
    );
}
add_action('add_meta_boxes', 'wpfront_add_custom_meta_box');

Здесь параметры функции:

  • 'wpfront_dynamic_fields' — уникальный ID метабокса;
  • 'Дополнительные данные' — заголовок метабокса;
  • 'wpfront_render_meta_box' — функция, которая будет выводить HTML метабокса;
  • 'post' — тип записи, для которого добавляем метабокс (можно указать 'page' или пользовательский тип);
  • 'normal' — расположение метабокса;
  • 'default' — приоритет.

Вывод формы для ввода данных

Теперь создадим функцию wpfront_render_meta_box, которая выведет необходимые поля. Для примера добавим два поля: «Цена» и «Артикул».

function wpfront_render_meta_box($post) {
    // Добавляем nonce для безопасности
    wp_nonce_field('wpfront_save_meta_box_data', 'wpfront_meta_box_nonce');

    $price = get_post_meta($post->ID, '_wpfront_price', true);
    $sku = get_post_meta($post->ID, '_wpfront_sku', true);

    echo '<p><label for="wpfront_price">Цена:</label>';
    echo '<input type="text" id="wpfront_price" name="wpfront_price" value="' . esc_attr($price) . '" size="25" /></p>';

    echo '<p><label for="wpfront_sku">Артикул:</label>';
    echo '<input type="text" id="wpfront_sku" name="wpfront_sku" value="' . esc_attr($sku) . '" size="25" /></p>';
}

Так мы получаем два текстовых поля, значения которых сохраняются в метаполях _wpfront_price и _wpfront_sku.

Сохранение данных динамических полей при сохранении записи

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

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

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

    // Сохраняем цену
    if (isset($_POST['wpfront_price'])) {
        $price = sanitize_text_field($_POST['wpfront_price']);
        update_post_meta($post_id, '_wpfront_price', $price);
    }

    // Сохраняем артикул
    if (isset($_POST['wpfront_sku'])) {
        $sku = sanitize_text_field($_POST['wpfront_sku']);
        update_post_meta($post_id, '_wpfront_sku', $sku);
    }
}
add_action('save_post', 'wpfront_save_meta_box_data');

Таким образом, при сохранении записи введённые данные попадут в метаполя.

Вывод динамических полей на фронтенде сайта

Теперь, когда у нас есть данные, их нужно вывести на странице записи или в шаблоне. Для этого используем функцию get_post_meta.

function wpfront_display_custom_fields() {
    global $post;
    $price = get_post_meta($post->ID, '_wpfront_price', true);
    $sku = get_post_meta($post->ID, '_wpfront_sku', true);

    if ($price) {
        echo '<p><strong>Цена:</strong> ' . esc_html($price) . '</p>';
    }
    if ($sku) {
        echo '<p><strong>Артикул:</strong> ' . esc_html($sku) . '</p>';
    }
}

Добавьте вызов wpfront_display_custom_fields() в нужное место ваших шаблонов, например, в single.php для отображения дополнительной информации под содержимым записи.

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

Принцип добавления динамических полей для пользовательских типов записей (Custom Post Types) идентичен. При регистрации метабокса укажите нужный тип записи.

add_meta_box(
    'wpfront_dynamic_fields',
    'Дополнительные данные',
    'wpfront_render_meta_box',
    'product', // пользовательский тип записи
    'normal',
    'default'
);

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

Преимущества использования собственного кода вместо плагинов

Использование собственного кода для создания и управления динамическими полями даёт несколько преимуществ:

  • Минимум зависимостей и отсутствие лишних плагинов, что улучшает производительность и безопасность;
  • Полный контроль над функциями и возможностью кастомизации под конкретные задачи;
  • Отсутствие конфликтов с обновлениями плагинов и тем;
  • Легкость интеграции с другими элементами сайта и темами.

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

Вывод

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

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

Автоматическое удаление старого медиа-контента в WordPress
09.04.2026
Как использовать REST API в WordPress для создания собственных настроек
25.11.2025
Как удалить черновики в WordPress без плагинов
22.01.2026
Как создать адаптивный блок с помощью CSS и JavaScript в WordPress
11.12.2025
Как автоматически отключить XML-RPC в WordPress для повышения безопасности
06.04.2026