В процессе работы над проектом, где мы создавали очень интересную галерею, работающую полностью на вложениях к записям WordPress и пользовательских типах записей, нам понадобилось добавить дополнительные поля в загрузчик медиафайлов. Эти дополнительные поля позволили нам добавить на каждую страницу с фотографией имя фотографа, ссылку на его сайт. WordPress сохраняет изображения во вложении в определенном типе записей, поэтому добавление мета данных в этом случае — просто добавление пользовательских полей. В виду того, что вложения WordPress не имеют интерфейса для добавления собственных доп.полей, пришлось добавлять поля в медиа загрузчик для сбора мета данных. В этой статье мы расскажем, как добавить дополнительные поля в медиазагрузчик WordPress.
Мы будем использовать следующие фильтры для изменений: attachment_fields_to_edit и attachment_fields_to_save
Для подобного рода проектов мы рекомендуем вам создать плагин для определенного сайта для WordPress и добавить в него следующий код. Однако, вы можете использовать его, просто добавив в файл functions.php примененной на сайте темы.
.
/** * Добавление имени фотографа и ссылок на сайт в медиазагрузчик * * @param массив $form_fields, поля для включения их в форму вложения * @param $post object, запись о вложении в БД * @return $form_fields, измененные поля формы */ function devise_attachment_field_credit( $form_fields, $post ) { $form_fields['devise-photographer-name'] = array( 'label' => 'Имя фотографа', 'input' => 'text', 'value' => get_post_meta( $post->ID, 'devise_photographer_name', true ), 'helps' => 'Если указано, будут отображаться реквизиты', ); $form_fields['be-photographer-url'] = array( 'label' => 'Сайт фотографа', 'input' => 'text', 'value' => get_post_meta( $post->ID, 'devise_photographer_url', true ), 'helps' => 'Добавление ссылки на сайт фотографа', ); return $form_fields; } add_filter( 'attachment_fields_to_edit', 'devise_attachment_field_credit', 10, 2 ); /** * Сохранение значений имени фотографа и ссылки в медиазагрузчике * * @param массив $post, данные о записи для БД * @param массив $attachment, поля вложения из формы $_POST * @return массив $post, измененные данные записи */ function devise_attachment_field_credit_save( $post, $attachment ) { if( isset( $attachment['devise-photographer-name'] ) ) update_post_meta( $post['ID'], 'devise_photographer_name', $attachment['devise-photographer-name'] ); if( isset( $attachment['devise-photographer-url'] ) ) update_post_meta( $post['ID'], 'devise_photographer_url', esc_url( $attachment['devise-photographer-url'] ) ); return $post; } add_filter( 'attachment_fields_to_save', 'devise_attachment_field_credit_save', 10, 2 ); ?>
Вышеприведенный код добавит два текстовых поля в медиазагрузчик с названиями Имя фотографа и Сайт фотографа.
Пояснения к коду: В первой функции мы просто используем массив для определения меток полей, типа ввода, значений и подсказок. Вторая функция проверяет, было ли задано значение для тех полей. ЕСЛИ значение задано, то метаданные обновляются.
Если вам нужно отобразить поля в шаблоне вложения, то просто скопируйте следующий код внутрь цикла:
echo get_post_meta($post->ID, 'devise_photographer_url', true);
Если вы хотите отобразить поля для вашей миниатюры в шаблоне архива, то используйте:
echo get_post_meta(get_post_thumbnail_id(), 'devise_photographer_url', true);
Надеемся, что статья оказалась полезной для вас.