Добавляем дополнительные поля в медиазагрузчик WordPress

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

Надеемся, что статья оказалась полезной для вас.

VN:F [1.9.22_1171]
Rating: 5.0/5 (2 votes cast)

Об авторе ADv

Занимаюсь разработкой сайтов и магазинов на WordPress. Оказываю платные помощь и консультации. Skype: advokat_b
Scroll To Top