В WordPress часто возникает необходимость добавить нестандартные поля к записям или страницам для хранения дополнительной информации. Это могут быть текстовые поля, даты, изображения или даже сложные структуры данных. В этой статье мы подробно разберём, как добавить поля произвольного типа в WordPress как с помощью кода, так и с помощью популярных плагинов.
Что такое поля произвольного типа в WordPress и зачем они нужны
Поля произвольного типа (custom fields) — это дополнительные метаданные, которые можно прикрепить к постам, страницам или другим типам записей (custom post types). Они позволяют расширять функциональность сайта без изменения структуры базы данных. Например, вы можете добавить цену товара, дату мероприятия или ссылку на скачивание.
Из коробки WordPress поддерживает добавление простых текстовых метаполей, но для удобства работы с разными типами данных лучше использовать продвинутые методы и инструменты.
Добавление произвольных полей вручную через метабоксы
Для создания собственных полей можно использовать метабоксы — специальные блоки в админке WordPress. Вот как создать метабокс с произвольным полем типа текст:
function wplessons_add_custom_meta_box() {
add_meta_box(
'wplessons_meta_box',
'Дополнительная информация',
'wplessons_meta_box_callback',
'post',
'normal',
'high'
);
}
add_action('add_meta_boxes', 'wplessons_add_custom_meta_box');
function wplessons_meta_box_callback($post) {
wp_nonce_field('wplessons_save_meta_box_data', 'wplessons_meta_box_nonce');
$value = get_post_meta($post->ID, '_wplessons_custom_field', true);
echo '<label for="wplessons_custom_field">Введите текст:</label> ';
echo '<input type="text" id="wplessons_custom_field" name="wplessons_custom_field" value="' . esc_attr($value) . '" size="25" />';
}
function wplessons_save_meta_box_data($post_id) {
if (!isset($_POST['wplessons_meta_box_nonce'])) {
return;
}
if (!wp_verify_nonce($_POST['wplessons_meta_box_nonce'], 'wplessons_save_meta_box_data')) {
return;
}
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
if (isset($_POST['wplessons_custom_field'])) {
$my_data = sanitize_text_field($_POST['wplessons_custom_field']);
update_post_meta($post_id, '_wplessons_custom_field', $my_data);
}
}
add_action('save_post', 'wplessons_save_meta_box_data');Этот код добавит на страницу редактирования записи новое поле, значение которого сохраняется как метаданные. Такой подход универсален, но требует написания кода и проверки безопасности.
Расширение: поле с датой и выбором цвета
Чтобы добавить поля другого типа, например, дату или цвет, можно использовать HTML5 элементы <input type="date"> и <input type="color">. Их обработка аналогична, нужно только правильно сохранять и выводить данные.
Использование плагинов для создания произвольных полей
Если вы хотите не писать код, существуют мощные плагины, которые позволяют создавать любые поля и даже целые группы полей с удобным интерфейсом. Рассмотрим два популярных варианта.
Advanced Custom Fields (ACF)
ACF — самый популярный плагин для создания произвольных полей. Он поддерживает множество типов полей: текст, число, выбор, галерея, повторители и многое другое. Интерфейс интуитивен, а вывод данных можно делать с помощью простых функций.
Пример вывода поля с помощью ACF:
if(function_exists('get_field')) {
$value = get_field('wplessons_custom_text');
if($value) {
echo '<p>Значение поля: ' . esc_html($value) . '</p>';
}
}Создавать поля можно прямо в админке, а затем обращаться к ним по имени.
Meta Box
Meta Box — ещё один мощный и гибкий плагин с возможностью расширения через дополнения. Он подходит для разработчиков, которые хотят контролировать всё через код, а также для тех, кто предпочитает визуальный интерфейс.
Пример регистрации метабокса с помощью Meta Box (в functions.php):
add_filter('rwmb_meta_boxes', 'wplessons_register_meta_boxes');
function wplessons_register_meta_boxes($meta_boxes) {
$meta_boxes[] = [
'title' => 'Дополнительные данные',
'post_types' => ['post'],
'fields' => [
[
'id' => 'wplessons_text',
'name' => 'Текстовое поле',
'type' => 'text',
],
[
'id' => 'wplessons_date',
'name' => 'Дата',
'type' => 'date',
],
],
];
return $meta_boxes;
}Вывод и использование данных произвольных полей в шаблоне
После сохранения произвольных полей важно правильно вывести их в шаблоне темы, чтобы информация отображалась на сайте.
Для метаданных, сохранённых вручную с помощью add_post_meta или update_post_meta, используйте функцию get_post_meta:
$value = get_post_meta(get_the_ID(), '_wplessons_custom_field', true);
if (!empty($value)) {
echo '<p>Дополнительная информация: ' . esc_html($value) . '</p>';
}Для полей ACF используйте get_field, как показано выше. Для Meta Box можно использовать функцию rwmb_meta:
$value = rwmb_meta('wplessons_text');
echo '<p>Текст: ' . esc_html($value) . '</p>';Советы по безопасности и оптимизации работы с произвольными полями
При добавлении и сохранении произвольных полей обязательно проверяйте nonce для защиты от CSRF-атак, используйте функции очистки данных, такие как sanitize_text_field, sanitize_textarea_field или специализированные для типов данных.
Для повышения производительности избегайте излишних запросов к базе, например, используйте кэширование данных, если поля часто запрашиваются.
Также учитывайте, что большое количество произвольных полей может замедлить работу сайта, поэтому планируйте структуру метаданных заранее.