Собственные поля (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><strong>Автор интервью:</strong> ' . esc_html($author_interview) . '</p>';
}
if ($event_date) {
echo '<p><strong>Дата мероприятия:</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 — кроме полей, позволяет создавать кастомные типы записей и таксономии.
Но помните: если задача простая, лучше обойтись собственным кодом — так вы контролируете производительность и не зависите от сторонних разработчиков.