В процессе работы над проектом, где мы создавали очень интересную галерею, работающую полностью на вложениях к записям 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);
Надеемся, что статья оказалась полезной для вас.
