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

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

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

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

Плагины упрощают работу с полями, но они добавляют нагрузку и могут конфликтовать с другими расширениями. Если задача простая — добавить пару полей — лучше сделать это вручную. Так вы получите лёгкий, понятный и гибкий код без лишних зависимостей.

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

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

function wpsource_add_custom_meta_box() {
    add_meta_box(
        'wpsource_custom_fields',
        'Дополнительные данные',
        'wpsource_custom_fields_callback',
        'post',
        'normal',
        'high'
    );
}
add_action('add_meta_boxes', 'wpsource_add_custom_meta_box');

function wpsource_custom_fields_callback($post) {
    wp_nonce_field('wpsource_save_custom_fields', 'wpsource_custom_fields_nonce');
    $author_interview = get_post_meta($post->ID, '_wpsource_author_interview', true);
    $event_date = get_post_meta($post->ID, '_wpsource_event_date', true);
    echo '<label for="wpsource_author_interview">Автор интервью: </label>';
    echo '<input type="text" id="wpsource_author_interview" name="wpsource_author_interview" value="' . esc_attr($author_interview) . '" size="25" />';
    echo '<br><br>';
    echo '<label for="wpsource_event_date">Дата мероприятия: </label>';
    echo '<input type="date" id="wpsource_event_date" name="wpsource_event_date" value="' . esc_attr($event_date) . '" />';
}

Этот код добавляет метабокс с двумя полями: текстовым и датой. Функция wpsource_add_custom_meta_box регистрирует метабокс, а wpsource_custom_fields_callback выводит HTML формы с полями. Мы также используем защиту nonce для безопасности при сохранении.

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

Чтобы данные полей сохранялись в базе, нужно обработать событие сохранения записи. Добавим следующий код:

function wpsource_save_custom_fields($post_id) {
    if (!isset($_POST['wpsource_custom_fields_nonce']) || !wp_verify_nonce($_POST['wpsource_custom_fields_nonce'], 'wpsource_save_custom_fields')) {
        return;
    }
    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }
    if (!current_user_can('edit_post', $post_id)) {
        return;
    }
    if (isset($_POST['wpsource_author_interview'])) {
        update_post_meta($post_id, '_wpsource_author_interview', sanitize_text_field($_POST['wpsource_author_interview']));
    }
    if (isset($_POST['wpsource_event_date'])) {
        update_post_meta($post_id, '_wpsource_event_date', sanitize_text_field($_POST['wpsource_event_date']));
    }
}
add_action('save_post', 'wpsource_save_custom_fields');

Здесь мы проверяем nonce, права пользователя и предотвращаем автосохранение, чтобы не перезаписать данные. Затем сохраняем значения в метаполе с помощью update_post_meta. Обязательно используйте функции очистки данных перед сохранением.

Вывод собственных полей в шаблонах темы

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

$author_interview = get_post_meta(get_the_ID(), '_wpsource_author_interview', true);
$event_date = get_post_meta(get_the_ID(), '_wpsource_event_date', true);

if ($author_interview) {
    echo '<p>&ltstrong>Автор интервью:</strong> ' . esc_html($author_interview) . '</p>';
}
if ($event_date) {
    echo '<p>&ltstrong>Дата мероприятия:</strong> ' . esc_html(date('d.m.Y', strtotime($event_date))) . '</p>';
}

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

Расширение функционала: валидация и кастомные типы записей

Если вы планируете использовать собственные поля часто, стоит сделать валидацию данных перед сохранением. Например, проверять формат даты или длину текста. Это уменьшит риск ошибок и некорректных данных.

Кроме того, для более сложных проектов лучше создавать кастомные типы записей (custom post types), чтобы логически отделить разные виды контента. Метабоксы и собственные поля работают с любыми типами записей, что даёт гибкость.

Пример регистрации кастомного типа записи с собственными полями:

function wpsource_register_custom_post_type() {
    $args = [
        'public' => true,
        'label'  => 'Отзывы',
        'supports' => ['title', 'editor', 'custom-fields']
    ];
    register_post_type('testimonial', $args);
}
add_action('init', 'wpsource_register_custom_post_type');

После регистрации типа записи можно добавить метабоксы аналогично примеру выше, изменив параметр add_meta_box с 'post' на 'testimonial'.

Альтернативные плагины для расширенного управления собственными полями

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

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

Но помните: если задача простая, лучше обойтись собственным кодом — так вы контролируете производительность и не зависите от сторонних разработчиков.

Как добавить поддержку PHP в визуальный редактор WordPress
11.03.2026
Как удалить записи определённого типа по условию в WordPress с примером кода
24.02.2026
Как создать автоматический sitemap в WordPress без плагинов
06.12.2025
Как создать динамический фильтровый поиск в WordPress с поддержкой AJAX
04.04.2026
Как защитить WordPress от bruteforce-атак: практические методы и примеры
24.01.2026