В 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.