Хук attachment_fields_to_save
предоставляет возможность изменять и сохранять дополнительные данные, связанные с вложениями в WordPress. Он позволяет перехватывать данные, которые отправляются на сервер при сохранении вложений (например, изображений), и выполнять с ними определенные действия перед их сохранением.
apply_filters( ‘attachment_fields_to_save’, array $post, array $attachment )
Этот фильтр используется для обработки данных вложений перед их сохранением в базу данных. Он позволяет изменить метаполя вложений или добавлять дополнительные данные, которые должны быть сохранены вместе с вложением.
По умолчанию хук получает данные, которые были введены на экране загрузки медиафайлов, и возвращает их обратно для дальнейшей обработки функцией media_upload_form_handler
.
Хук полезен, когда нужно:
- Обработать или изменить метаданные вложений.
- Добавить новые поля для вложений в админке.
- Вставить значения по умолчанию для полей, таких как заголовок или описание.
Параметры
- $post (array): Массив данных поста (вложение), содержащий такие элементы, как
post_title
,post_excerpt
, и другие. - $attachment (array): Массив метаданных вложения, содержащий такие данные, как MIME-тип файла, его путь и т.д.
Пример 1: Добавление стандартного заголовка и подписи для изображений
Этот пример демонстрирует, как добавить стандартный заголовок и подпись для изображений, если пользователь не заполнил эти поля.
function insert_default_caption_for_images($post, $attachment) {
// Проверяем, что это изображение
if ('image' === substr($post['post_mime_type'], 0, 5)) {
// Если заголовок не был задан, заполняем его из имени файла
if (0 === strlen(trim($post['post_title']))) {
$post['post_title'] = preg_replace('/\.\w+$/', '', basename($post['guid']));
$post['errors']['post_title']['errors'][] = __('Title filled from filename.');
}
// Если подпись не задана, заполняем ее стандартным текстом
if (0 === strlen(trim($post['post_excerpt']))) {
$post['post_excerpt'] = 'Default caption';
}
}
return $post;
}
add_filter('attachment_fields_to_save', 'insert_default_caption_for_images', 10, 2);
В этом примере для изображений будет автоматически добавлен заголовок, если он не был заполнен пользователем, и будет установлена стандартная подпись «Default caption».
Пример 2: Сохранение произвольных метаполей
Если необходимо добавить и сохранить произвольные метаполя (например, для цены в карусели изображений), можно использовать этот хук.
// Добавление поля для ввода цены на изображение
add_filter('attachment_fields_to_edit', 'add_carousel_price_field', 10, 2);
function add_carousel_price_field($form_fields, $post) {
$form_fields['carousel_price'] = array(
'label' => 'Цена (если нужно)',
'input' => 'text',
'value' => get_post_meta($post->ID, 'carousel_price', true)
);
return $form_fields;
}
// Сохранение произвольного поля с ценой
add_filter('attachment_fields_to_save', 'save_carousel_price_field', 10, 2);
function save_carousel_price_field($post, $attachment) {
if (isset($attachment['carousel_price'])) {
update_post_meta($post['ID'], 'carousel_price', $attachment['carousel_price']);
} else {
delete_post_meta($post['ID'], 'carousel_price');
}
return $post;
}
В этом примере добавляется поле для ввода цены на изображение (например, для использования в карусели), а затем сохраняется значение этого поля в метаданных изображения.
Пример 3: Автоматическое заполнение метаполя
Этот пример показывает, как можно автоматически заполнять метаполе с информацией, если оно не было указано пользователем.
function auto_fill_meta_fields($post, $attachment) {
// Проверяем тип вложения и заполняем метаполя
if ('image' === substr($post['post_mime_type'], 0, 5)) {
if (empty($post['post_title'])) {
$post['post_title'] = 'Image_' . $post['ID']; // Уникальное имя для изображения
}
if (empty($post['post_excerpt'])) {
$post['post_excerpt'] = 'Generated Caption'; // Генерируем подпись
}
}
return $post;
}
add_filter('attachment_fields_to_save', 'auto_fill_meta_fields', 10, 2);
Здесь мы автоматически заполняем поля post_title
и post_excerpt
для изображений, если они не были заполнены.
Заключение
Хук attachment_fields_to_save
является мощным инструментом для работы с метаполями вложений в WordPress. Он позволяет вам изменять или добавлять новые данные при сохранении вложений, что открывает широкие возможности для кастомизации и улучшения пользовательского опыта. Используйте этот хук для добавления метаполей, установки значений по умолчанию и обработки данных перед их сохранением.