У процесі роботи над проектом ми якось вирішили створити красиву галерею, повністю побудовану на вкладеннях для 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"*, щоб це відображалося таким чином:
У цьому уроці описано як додавати лише мета-дані до зображення. Ви хочете додати параметри стилю відображення.