В WordPress часто возникает необходимость добавить уникальные поля (кастомные поля) к записям, страницам или пользовательским типам записей. Это позволяет расширить стандартный функционал и хранить дополнительные данные. Многие сразу идут в поиск плагинов, но иногда удобнее и эффективнее реализовать это через код — без плагинов. В этой статье разберём, как добавить уникальные поля с помощью собственного кода, управлять ими в админке и выводить на сайте.
Что такое уникальные поля и зачем они нужны
Уникальные поля — это дополнительные метаданные, которые можно привязать к записи, странице или любому кастомному типу записи. Они позволяют хранить любую дополнительную информацию: характеристики товара, дату события, дополнительный текст и многое другое.
Например, для сайта с каталогом товаров можно добавить поле «Артикул» или «Производитель». Для блога — поле «Источник» или «Дата проведения мероприятия». Встроенные кастомные поля в WordPress есть, но их интерфейс неудобен, и без доработок трудно ограничить набор полей или сделать их удобными для заполнения.
Добавляем уникальные поля в админку WordPress вручную
Для начала создадим метабокс, в котором будем вводить наши уникальные поля. Для примера добавим к записи поле «Дополнительная информация».
Создание метабокса
В файл functions.php вашей темы или в подключаемый плагин добавьте следующий код:
function wp_course_add_custom_meta_box() {
add_meta_box(
'wp_course_custom_meta', // ID метабокса
'Дополнительная информация', // Заголовок
'wp_course_custom_meta_box_callback', // Функция вывода
'post', // Тип записи (здесь - записи блога)
'normal', // Контекст
'high' // Приоритет
);
}
add_action('add_meta_boxes', 'wp_course_add_custom_meta_box');Эта функция добавляет новый метабокс на страницу редактирования записи.
Вывод полей внутри метабокса
Теперь создадим функцию-колбэк, которая выведет поле ввода:
function wp_course_custom_meta_box_callback($post) {
wp_nonce_field('wp_course_save_meta_box_data', 'wp_course_meta_box_nonce');
$value = get_post_meta($post->ID, '_wp_course_custom_field', true);
echo '<label for="wp_course_custom_field">Введите дополнительную информацию:</label>';
echo '<input type="text" id="wp_course_custom_field" name="wp_course_custom_field" value="'.esc_attr($value).'" size="25" />';
}Здесь мы создаём поле, в котором можно ввести текст. Значение сохраняется в метаданные записи с ключом _wp_course_custom_field.
Сохранение данных метаполя
Чтобы введённые данные сохранялись, добавим обработчик сохранения:
function wp_course_save_meta_box_data($post_id) {
if (!isset($_POST['wp_course_meta_box_nonce'])) {
return;
}
if (!wp_verify_nonce($_POST['wp_course_meta_box_nonce'], 'wp_course_save_meta_box_data')) {
return;
}
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
if (!current_user_can('edit_post', $post_id)) {
return;
}
if (!isset($_POST['wp_course_custom_field'])) {
return;
}
$my_data = sanitize_text_field($_POST['wp_course_custom_field']);
update_post_meta($post_id, '_wp_course_custom_field', $my_data);
}
add_action('save_post', 'wp_course_save_meta_box_data');Этот код проверяет права пользователя, nonce и корректно сохраняет данные в базу.
Вывод уникального поля на сайте
Чтобы вывести введённую информацию на странице записи, в шаблоне single.php или аналогичном используйте:
$custom_field = get_post_meta(get_the_ID(), '_wp_course_custom_field', true);
if (!empty($custom_field)) {
echo '<div class="wp-course-custom-field">' . esc_html($custom_field) . '</div>';
}Так вы сможете гибко показывать дополнительную информацию в любом месте шаблона.
Добавление нескольких уникальных полей с разными типами
Если нужно добавить набор уникальных полей с разными типами (текст, чекбокс, select), стоит расширить метабокс и обработчик сохранения. Рассмотрим пример с полем «Статус» (select) и галочкой «Показать на главной» (checkbox).
function wp_course_custom_meta_box_callback($post) {
wp_nonce_field('wp_course_save_meta_box_data', 'wp_course_meta_box_nonce');
$text_value = get_post_meta($post->ID, '_wp_course_text_field', true);
$status_value = get_post_meta($post->ID, '_wp_course_status_field', true);
$show_on_home = get_post_meta($post->ID, '_wp_course_show_on_home', true);
echo '<p><label for="wp_course_text_field">Текстовое поле:</label><br/>';
echo '<input type="text" id="wp_course_text_field" name="wp_course_text_field" value="'.esc_attr($text_value).'" size="30" /></p>';
echo '<p><label for="wp_course_status_field">Статус:</label><br/>';
echo '<select id="wp_course_status_field" name="wp_course_status_field">';
$options = array('draft' => 'Черновик', 'published' => 'Опубликовано', 'archived' => 'Архив');
foreach ($options as $key => $label) {
$selected = ($status_value === $key) ? 'selected' : '';
echo "<option value=\"$key\" $selected>$label</option>";
}
echo '</select></p>';
$checked = ($show_on_home === 'yes') ? 'checked' : '';
echo '<p><input type="checkbox" id="wp_course_show_on_home" name="wp_course_show_on_home" value="yes" ' . $checked . ' />';
echo '<label for="wp_course_show_on_home">Показывать на главной</label></p>';
}Обновим функцию сохранения:
function wp_course_save_meta_box_data($post_id) {
if (!isset($_POST['wp_course_meta_box_nonce'])) {
return;
}
if (!wp_verify_nonce($_POST['wp_course_meta_box_nonce'], 'wp_course_save_meta_box_data')) {
return;
}
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
if (!current_user_can('edit_post', $post_id)) {
return;
}
if (isset($_POST['wp_course_text_field'])) {
update_post_meta($post_id, '_wp_course_text_field', sanitize_text_field($_POST['wp_course_text_field']));
}
if (isset($_POST['wp_course_status_field'])) {
$allowed = array('draft', 'published', 'archived');
$status = sanitize_text_field($_POST['wp_course_status_field']);
if (in_array($status, $allowed)) {
update_post_meta($post_id, '_wp_course_status_field', $status);
}
}
$show = isset($_POST['wp_course_show_on_home']) && $_POST['wp_course_show_on_home'] === 'yes' ? 'yes' : 'no';
update_post_meta($post_id, '_wp_course_show_on_home', $show);
}
add_action('save_post', 'wp_course_save_meta_box_data');Использование готовых плагинов для кастомных полей
Если писать код не хочется, есть хорошие плагины с визуальным интерфейсом, например:
- Clearfy Pro — в том числе умеет управлять метаполями и оптимизировать сайт;
- WPRemark — хороший плагин для работы с контентом и метаданными;
- Advanced Custom Fields (ACF) — самый известный плагин для создания и управления уникальными полями.
Но если нужно лёгкое, простое и без плагинов — описанный выше способ отлично подойдёт.
Итоги и рекомендации
Добавлять уникальные поля в WordPress без плагинов — вполне реальная задача даже для среднеопытного разработчика. Такой подход позволяет держать сайт максимально лёгким и минимизировать количество стороннего кода.
Главные шаги — создать метабокс, вывести поля, сохранить данные с проверками и вывести их на сайте. При необходимости можно создавать любые типы полей, расширять функционал и интегрировать с другими частями сайта.
Если нужна автоматизация или визуальное управление — стоит обратить внимание на плагины из каталога WPSHOP.RU.