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