Собственные поля (custom fields) в WordPress — мощный инструмент для расширения возможностей стандартного контента. Они позволяют добавить дополнительную информацию к записям, страницам и кастомным типам записей. Многие пользователи сразу идут к плагинам, чтобы реализовать это, однако иногда лучше обойтись без них и написать собственный код. Это повысит производительность сайта и даст полный контроль над функционалом.
Что такое собственные поля и зачем они нужны в WordPress
Собственные поля — это метаданные, которые вы можете прикрепить к любой записи, странице или кастомному типу записи. Они хранят произвольные данные, которые не входят в стандартные поля WordPress, такие как заголовок или содержание. Например, вы можете добавить цену товара, дату события, координаты на карте или ссылку на видео.
Использование собственных полей позволяет создавать гибкие и кастомизированные сайты без необходимости создавать отдельные таблицы в базе данных.
Стандартный интерфейс WordPress уже содержит возможность добавления пользовательских полей, но он достаточно ограничен и неудобен для массового использования. Поэтому часто используют код, чтобы добавить удобный интерфейс для редактирования и вывода этих данных.
Как добавить собственные поля в WordPress через метабоксы (meta boxes)
Для добавления своих полей удобно создавать метабоксы — отдельные блоки в административной панели редактирования записи. Это позволяет организовать ввод данных и настроить их в соответствии с задачами проекта.
Рассмотрим пример, как добавить метабокс с двумя полями: "Цена" и "Дата окончания акции" для обычной записи (post).
Регистрация метабокса
В файле functions.php вашей темы или в отдельном плагине добавьте следующий код:
function wpkit_add_custom_meta_box() {
add_meta_box(
'wpkit_meta_box_id',
'Дополнительные параметры',
'wpkit_meta_box_callback',
'post',
'normal',
'high'
);
}
add_action('add_meta_boxes', 'wpkit_add_custom_meta_box');Эта функция добавляет метабокс с ID wpkit_meta_box_id, заголовком "Дополнительные параметры" на экран редактирования записи.
Отображение полей в метабоксе
Теперь определим функцию обратного вызова, которая выведет HTML поля для ввода:
function wpkit_meta_box_callback($post) {
// Безопасность: nonce поле
wp_nonce_field('wpkit_save_meta_box_data', 'wpkit_meta_box_nonce');
$price = get_post_meta($post->ID, '_wpkit_price', true);
$expiry_date = get_post_meta($post->ID, '_wpkit_expiry_date', true);
echo '<label for="wpkit_price">Цена:</label> ';
echo '<input type="number" id="wpkit_price" name="wpkit_price" value="' . esc_attr($price) . '" step="0.01"><br>';
echo '<label for="wpkit_expiry_date">Дата окончания акции:</label> ';
echo '<input type="date" id="wpkit_expiry_date" name="wpkit_expiry_date" value="' . esc_attr($expiry_date) . '">';
}Таким образом, появятся два поля ввода с сохранёнными значениями, если они есть.
Сохранение данных собственных полей
Чтобы данные сохранялись при сохранении записи, нужно добавить обработчик:
function wpkit_save_meta_box_data($post_id) {
// Проверяем nonce
if (!isset($_POST['wpkit_meta_box_nonce']) || !wp_verify_nonce($_POST['wpkit_meta_box_nonce'], 'wpkit_save_meta_box_data')) {
return;
}
// Проверяем права пользователя
if (!current_user_can('edit_post', $post_id)) {
return;
}
// Проверяем, что поля переданы
if (isset($_POST['wpkit_price'])) {
$price = sanitize_text_field($_POST['wpkit_price']);
update_post_meta($post_id, '_wpkit_price', $price);
}
if (isset($_POST['wpkit_expiry_date'])) {
$expiry_date = sanitize_text_field($_POST['wpkit_expiry_date']);
update_post_meta($post_id, '_wpkit_expiry_date', $expiry_date);
}
}
add_action('save_post', 'wpkit_save_meta_box_data');Этот код гарантирует сохранение данных при обновлении записи и защиту от неавторизованных изменений.
Как вывести собственные поля на сайте в шаблоне WordPress
После сохранения данных нужно вывести их на сайте. Для этого в шаблоне темы (например, в single.php) используйте функцию get_post_meta:
$price = get_post_meta(get_the_ID(), '_wpkit_price', true);
$expiry_date = get_post_meta(get_the_ID(), '_wpkit_expiry_date', true);
if ($price) {
echo '<p>Цена: ' . esc_html($price) . '</p>';
}
if ($expiry_date) {
echo '<p>Акция действует до: ' . esc_html($expiry_date) . '</p>';
}Это простой способ вывести дополнительную информацию рядом с основным содержимым записи.
Преимущества добавления собственных полей вручную без плагинов
Выбор способа добавления собственных полей зависит от задачи. Использование плагинов удобно, но не всегда оправдано:
- Отсутствие лишних зависимостей и плагинов на сайте.
- Полный контроль над кодом и структурой данных.
- Возможность точного кастомизированного интерфейса без лишних функций.
- Оптимизация скорости загрузки и безопасности.
Если вы хотите сделать простой и легковесный сайт или интегрировать собственные поля в сложный кастомный проект, лучше писать код самостоятельно.
Рекомендации по безопасности и оптимизации работы с метаполями
Работая с собственными полями, обязательно соблюдайте несколько правил безопасности:
- Используйте
wp_nonce_fieldи проверяйте nonce при сохранении данных. - Проверяйте права пользователя перед сохранением или изменением данных.
- Санитизируйте и валидируйте все данные, полученные из формы.
- Используйте префиксы в именах метаполей, чтобы избежать конфликтов с другими плагинами и темами.
Также, для удобства и масштабируемости стоит структурировать код, выносить повторяющиеся функции и использовать хуки WordPress.
Альтернативные плагины для работы с собственными полями
Если вы всё же решите использовать плагины, вот несколько проверенных решений, которые помогут быстро создать и управлять собственными полями без программирования:
- Advanced Custom Fields (ACF) — самый популярный плагин для создания метаполей с удобным интерфейсом.
- Meta Box — гибкий и мощный инструмент с большим набором типов полей.
- CMB2 — легковесный и простой для разработчиков плагин, который можно расширять под свои нужды.
Однако помните, что использование этих плагинов добавляет дополнительную нагрузку и требует поддержки.
Вывод
Добавление собственных полей без плагинов — это отличный способ создать уникальный и оптимизированный сайт на WordPress с нужным функционалом. С помощью метабоксов, правильного сохранения и вывода данных вы легко расширите стандартный редактор и сможете управлять дополнительной информацией на странице.