В процессе работы над проектом мы как-то решили создать красивую галерею, полностью построенную на вложениях для WordPress и настраиваемом типе публикаций на сайте, для чего нам понадобилось ввести дополнительные поля в загрузчик медиа-файлов для WordPress-сайта. Данные дополнительные поля позволили нам указать имя и данные каждого фотографа, чьи снимки были использованы, а также URL сайта фотографа на странице с изображениями. В WordPress изображения хранятся как посты, описанные во вложениях сайта, поэтому добавление мета-данных имеет такой же характер, как добавление настраиваемых полей.
Поскольку вложения WordPress не имеют собственного интерфейса для настраиваемых полей, нам пришлось добавить эти поля в медиа-загрузчик так, чтобы они собирали мета-данные. В данной публикации я покажу вам, как именно добавить дополнительные поля в загрузчик WordPress Media Uploader.
Для этой цели мы будем применять следующие фильтры: attachment_fields_to_edit и attachment_fields_to_save
Все что нужно сделать — это вставить фрагмент кода в файл вашей темы functions.php, чтобы заработали требуемые изменения на сайте:
/**
* Add Photographer Name and URL fields to media uploader
*
* @param $form_fields array, fields to include in attachment form
* @param $post object, attachment record in database
* @return $form_fields, modified form fields
*/
function be_attachment_field_credit( $form_fields, $post ) {
$form_fields['be-photographer-name'] = array(
'label' => 'Photographer Name',
'input' => 'text',
'value' => get_post_meta( $post->ID, 'be_photographer_name', true ),
'helps' => 'If provided, photo credit will be displayed',
);
$form_fields['be-photographer-url'] = array(
'label' => 'Photographer URL',
'input' => 'text',
'value' => get_post_meta( $post->ID, 'be_photographer_url', true ),
'helps' => 'Add Photographer URL',
);
return $form_fields;
}
add_filter( 'attachment_fields_to_edit', 'be_attachment_field_credit', 10, 2 );
/**
* Save values of Photographer Name and URL in media uploader
*
* @param $post array, the post data for database
* @param $attachment array, attachment fields from $_POST form
* @return $post array, modified post data
*/
function be_attachment_field_credit_save( $post, $attachment ) {
if( isset( $attachment['be-photographer-name'] ) )
update_post_meta( $post['ID'], 'be_photographer_name', $attachment['be-photographer-name'] );
if( isset( $attachment['be-photographer-url'] ) )
update_post_meta( $post['ID'], 'be_photographer_url', esc_url( $attachment['be-photographer-url'] ) );
return $post;
}
add_filter( 'attachment_fields_to_save', 'be_attachment_field_credit_save', 10, 2 );
?>Приведенный выше код добавит 2 текстовых поля к вашему медиа-загрузчику, поля эти будут называться Photographer Name и Photographer URL. Как будут выглядеть эти поля, вы можете увидеть на рисунке ниже:

Разъяснение по коду:
- В первой функции мы просто используем массив для конкретизации ярлыка для поля, типа ввода, значения и текста-подсказки.
- Вторая функция проверяет, заданы ли правильные значения для всех полей. Если значение заданы правильно и они проверены, то загружаются мета-данные вашего поста.
Если вы хотите отображать поля для шаблона ваших загружаемых файлов, тогда просто вставьте следующие фрагменты кода внутри цикла:
echo get_post_meta($post->ID, 'be_photographer_url', true);
Если вы хотите отображать значения полей для поддерживаемых изображений в архивном шаблоне или в любом другом шаблоне, тогда просто используйте такой код:
echo get_post_meta(get_post_thumbnail_id(), 'be_photographer_url', true);
На этом все. Надеемся, что этот небольшой урок вам пригодится.





















Комментарии к записи: 3
Полезно. Спасибо.
А как сделать дополнительное поле в загрузчике, если мне надо добавлять к картинкам дополнительные параметры, например: *rel=»shadowbox;height=480;width=640″*, чтобы это отображалось следующим образом:
В данном уроке описано как добавлять только мета-данные к изображению. А вы хотите добавить параметры стиля отображения.