На основе встроенной WP функции
wp_read_image_metadata
создал кастомную
wp_read_image_metadata_exif
, которая получает нужные мне EXIF поля изображения. Далее состряпал функцию, которая выводит значения этих полей в редакторе медиафайлов:
Код:
function wp_read_image_metadata_exif( $file ) {
if ( ! file_exists( $file ) ) {
return false;
}
list( , , $image_type ) = wp_getimagesize( $file );
if ( is_callable( 'iptcparse' ) ) {
wp_getimagesize( $file, $info );
if ( ! empty( $info['APP13'] ) ) {
if ( defined( 'WP_DEBUG' ) && WP_DEBUG
&& ! defined( 'WP_RUN_CORE_TESTS' )
) {
$iptc = iptcparse( $info['APP13'] );
} else {
$iptc = @iptcparse( $info['APP13'] );
}
if ( ! empty( $iptc['2#090'][0] ) ) { // City.
$meta['city'] = trim( $iptc['2#090'][0] );
}
if ( ! empty( $iptc['2#027'][0] ) ) { // Location Name.
$meta['locationname'] = trim( $iptc['2#027'][0] );
}
}
}
return apply_filters( 'wp_read_image_metadata_exif', $meta, $file, $iptc );
}
function display_exif_fields ( $form_fields, $post ){
$type = get_post_mime_type( $post->ID );
$attachment_path = get_attached_file( $post->ID );
$metadata = wp_read_image_metadata_exif( $attachment_path );
$form_fields['city'] = array(
'label' => 'City',
'input' => 'text',
'value' => $metadata['city'],
'helps' => '',
);
$form_fields['locationname'] = array(
'label' => 'Location name',
'input' => 'text',
'value' => $metadata['locationname'],
'helps' => '',
);
return $form_fields;
}
add_filter( 'attachment_fields_to_edit', 'display_exif_fields', 10, 2 );
Подскажите, как сохранить эти значения в базе данных WP, в wp_postmeta?
Пробовал следующее, не работает:
function save_exif_fields( $post, $attachment ) {
if( isset( $attachment['city'] ) )
update_post_meta( $post['ID'], 'city', $attachment['city'] );
if( isset( $attachment['locationname'] ) )
update_post_meta( $post['ID'], 'locationname', esc_url( $attachment['locationname'] ) );
return $post;
}
add_filter( 'attachment_fields_to_save', 'save_exif_fields', 10, 2 );