В стандартной медиабиблиотеке WordPress отсутствует возможность добавлять и управлять уникальными пользовательскими полями для медиафайлов. Это ограничивает гибкость при работе с изображениями, видео и другими файлами, если нужно хранить дополнительные метаданные, например, авторство, лицензии, географическую привязку и т.п. В этой статье мы разберём, как добавить уникальные поля для медиа в WordPress с помощью кода и популярных плагинов, а также рассмотрим практические примеры использования.
Почему нужны уникальные поля для медиа в WordPress
По умолчанию WordPress позволяет редактировать только базовые данные медиафайлов: название, подпись, описание и альтернативный текст. Однако в сложных проектах часто требуется хранить дополнительную информацию, например:
- Автор и права на фото или видео;
- Дата съёмки или создания;
- Теги и категории, относящиеся к медиафайлу;
- Специфичные для проекта атрибуты (например, место съёмки, используемое оборудование и т.д.).
Без возможности добавления кастомных полей приходится хранить эти данные отдельно, что неудобно и приводит к ошибкам.
Создание пользовательских полей для медиафайлов через код
Для добавления уникальных полей в медиафайлы можно использовать хук attachment_fields_to_edit для вывода полей в админке и attachment_fields_to_save для сохранения данных. Ниже приведён пример, как добавить поле «Автор фото».
function wp_course_attachment_extra_fields($form_fields, $post) {
$form_fields['wp_course_author'] = array(
'label' => 'Автор фото',
'input' => 'text',
'value' => get_post_meta($post->ID, '_wp_course_author', true),
'helps' => 'Укажите имя автора фотографии'
);
return $form_fields;
}
add_filter('attachment_fields_to_edit', 'wp_course_attachment_extra_fields', 10, 2);
function wp_course_attachment_extra_fields_save($post, $attachment) {
if (isset($attachment['wp_course_author'])) {
update_post_meta($post['ID'], '_wp_course_author', sanitize_text_field($attachment['wp_course_author']));
}
return $post;
}
add_filter('attachment_fields_to_save', 'wp_course_attachment_extra_fields_save', 10, 2);Этот код добавляет новое текстовое поле к каждому медиафайлу в редакторе и сохраняет введённое значение в метаполе. Вы можете добавить любое количество таких полей, меняя ключи и метки.
Вывод уникальных полей в шаблонах темы
Чтобы вывести значение пользовательских полей на сайте, используйте функцию get_post_meta. Например, для вывода автора фото:
$author = get_post_meta($attachment_id, '_wp_course_author', true);
if ($author) {
echo '<p>Автор фото: ' . esc_html($author) . '</p>';
}Где $attachment_id — ID медиафайла.
Использование плагинов для расширения возможностей медиафайлов
Если вы не хотите писать код, рекомендуем обратить внимание на проверенные плагины, которые позволяют создавать и управлять уникальными полями для медиа:
- Advanced Custom Fields (ACF) — один из самых популярных плагинов для создания кастомных полей, поддерживает поля для медиа.
- Media Library Assistant — расширяет возможности медиабиблиотеки, позволяет добавлять и фильтровать по пользовательским полям.
- WP Media Folder — улучшает управление медиа, включая создание таксономий и дополнительных полей.
Например, с ACF можно создать группу полей, выбрать в настройках тип записи «Media» — и поля появятся при редактировании медиафайлов.
Пример настройки ACF для медиафайлов
1. Установите и активируйте ACF.
2. Создайте новую группу полей и добавьте необходимые поля (текст, выбор, дата и др.).
3. В разделе «Расположение» выберите «Тип записи» равно «Медиафайл».
4. Сохраните изменения, теперь при редактировании изображений в медиабиблиотеке появятся ваши поля.
Как автоматизировать заполнение уникальных полей для медиа
Для проектов с большим количеством медиафайлов полезно автоматизировать заполнение уникальных полей. Например, можно при загрузке автоматически заполнять дату съёмки из EXIF-данных или добавлять шаблонные значения.
Пример автоматического заполнения поля «Дата съёмки» из EXIF при загрузке:
function wp_course_fill_exif_date($post_ID) {
$post = get_post($post_ID);
if ($post->post_type !== 'attachment') return;
$file = get_attached_file($post_ID);
if (!$file) return;
$exif = @exif_read_data($file);
if ($exif !== false && !empty($exif['DateTimeOriginal'])) {
update_post_meta($post_ID, '_wp_course_shoot_date', sanitize_text_field($exif['DateTimeOriginal']));
}
}
add_action('add_attachment', 'wp_course_fill_exif_date');<Такой подход позволяет экономить время и исключить ошибки ручного ввода.
Советы по организации и поиску по уникальным полям в медиабиблиотеке
Добавление уникальных полей — это только половина задачи. Важно также обеспечить удобный поиск и фильтрацию медиафайлов по этим полям. Для этого можно использовать:
- Плагины с расширенным поиском, например, Media Library Assistant;
- Кастомные запросы WP_Query с параметром
meta_queryдля фильтрации по метаданным; - Создание пользовательских таксономий для медиабиблиотеки, чтобы комбинировать с уникальными полями.
Например, для поиска медиафайлов с автором "Иван Иванов" используйте:
$query = new WP_Query(array(
'post_type' => 'attachment',
'meta_query' => array(
array(
'key' => '_wp_course_author',
'value' => 'Иван Иванов',
'compare' => '='
)
)
));
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
echo get_the_title() . '<br>';
}
}
wp_reset_postdata();