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

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

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

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

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

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

Первый шаг — добавить мета-бокс в админку. Для этого используем хук add_meta_boxes и функцию add_meta_box. Рассмотрим пример добавления мета-бокса с полем для ввода дополнительного текста.

function wp24_add_custom_meta_box() {
    add_meta_box(
        'wp24_custom_meta', // ID мета-бокса
        'Дополнительная информация', // Заголовок
        'wp24_render_custom_meta_box', // Callback для вывода HTML
        'post', // Тип записи
        'normal', // Расположение
        'default' // Приоритет
    );
}
add_action('add_meta_boxes', 'wp24_add_custom_meta_box');

function wp24_render_custom_meta_box($post) {
    // Получаем сохраненное значение
    $value = get_post_meta($post->ID, '_wp24_custom_field', true);
    // Безопасность nonce
    wp_nonce_field('wp24_save_custom_meta_box_data', 'wp24_custom_meta_box_nonce');
    echo '<label for="wp24_custom_field">Введите дополнительный текст:</label>';
    echo '<input type="text" id="wp24_custom_field" name="wp24_custom_field" value="' . esc_attr($value) . '" size="25" />';
}

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

Сохранение данных пользовательских полей

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

function wp24_save_custom_meta_box_data($post_id) {
    // Проверяем nonce
    if (!isset($_POST['wp24_custom_meta_box_nonce']) || !wp_verify_nonce($_POST['wp24_custom_meta_box_nonce'], 'wp24_save_custom_meta_box_data')) {
        return;
    }
    // Проверяем права
    if (!current_user_can('edit_post', $post_id)) {
        return;
    }
    // Проверяем автосохранение
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    if (isset($_POST['wp24_custom_field'])) {
        $my_data = sanitize_text_field($_POST['wp24_custom_field']);
        update_post_meta($post_id, '_wp24_custom_field', $my_data);
    }
}
add_action('save_post', 'wp24_save_custom_meta_box_data');

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

Чтобы вывести добавленное поле в шаблоне темы, используйте функцию get_post_meta. Например, можно добавить этот код в файл single.php или в шаблон, где нужно показать дополнительную информацию.

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

Так вы динамически получите значение и безопасно выведете его на страницу.

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

Часто требуется добавить не одно, а несколько полей разного типа — текстовые, чекбоксы, селекты. Для этого в функции вывода мета-бокса можно использовать HTML с разными input-элементами. Для примера добавим еще чекбокс и поле выбора.

function wp24_render_custom_meta_box($post) {
    $text = get_post_meta($post->ID, '_wp24_custom_text', true);
    $checkbox = get_post_meta($post->ID, '_wp24_custom_checkbox', true);
    $select = get_post_meta($post->ID, '_wp24_custom_select', true);

    wp_nonce_field('wp24_save_custom_meta_box_data', 'wp24_custom_meta_box_nonce');

    echo '<p><label for="wp24_custom_text">Текстовое поле:</label><br/>';
    echo '<input type="text" id="wp24_custom_text" name="wp24_custom_text" value="' . esc_attr($text) . '" size="30" /></p>';

    echo '<p><label><input type="checkbox" id="wp24_custom_checkbox" name="wp24_custom_checkbox" value="1"' . checked(1, $checkbox, false) . ' /> Активировать опцию</label></p>';

    echo '<p><label for="wp24_custom_select">Выберите вариант:</label><br/>';
    echo '<select id="wp24_custom_select" name="wp24_custom_select">';
    $options = ['option1' => 'Вариант 1', 'option2' => 'Вариант 2', 'option3' => 'Вариант 3'];
    foreach ($options as $key => $label) {
        echo '<option value="' . esc_attr($key) . '"' . selected($select, $key, false) . '>' . esc_html($label) . '</option>';
    }
    echo '</select></p>';
}

При сохранении добавьте соответствующую обработку для новых полей, не забывая о валидации и санитизации.

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

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

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

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

Выводы и рекомендации

Добавление собственных пользовательских полей без плагинов — это несложно и позволяет полностью контролировать процесс. Главное — использовать правильные хуки, помнить о безопасности (nonce, проверка прав) и корректной обработке данных (санитизация и валидация). Такой подход подходит для проектов, где важна легковесность и кастомизация.

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

Удаление неиспользуемых таблиц в базе данных WordPress: практическое руководство
28.11.2025
Как добавить собственные поля в WordPress без плагинов
02.11.2025
Как создать собственный виджет WordPress с примером кода
02.12.2025
Как избежать проблем с кэшированием в WordPress
13.12.2025
Оптимизация загрузки изображений в WordPress: практические методы и примеры
25.11.2025