¿Guardar información de la cámara como metadatos en la carga de imágenes?

8

Estoy intentando que WordPress guarde automáticamente los metadatos de "crédito" que están almacenados en las imágenes que estoy cargando. Sé que esto se ingresaría como un meta campo de publicación personalizado usando update_post_meta().

La información de "crédito" es recopilada por wp_read_image_metadata(), pero media_handle_upload()no la utiliza. Solo utiliza la información de "título" y "título" recopilada de la imagen para post_contenty post_titlerespectivamente.

He encontrado varios ejemplos de cómo agregar campos de metadatos de archivos adjuntos personalizados después de la carga al editar la imagen, pero como WP ya está recopilando esta información de los metadatos de la imagen, me gustaría encontrar una manera de guardarla como imagen. está subido

No tengo claro qué pasos tomar para enganchar media_handle_upload()(no parece haber un enganche) para poder llamar update_post_metapara guardar la línea de "crédito" para el archivo adjunto.

edeneye
fuente
1
Esta es una gran pregunta, intentaré responderla cuando tenga tiempo o agregarle una recompensa. Lo intenté durante 15 minutos y produjo algunos errores increíblemente detallados como "se produjo un error en la carga. Vuelve a intentarlo más tarde", a pesar de que funcionaba.
Wyck
2
Hola @Wyck, de hecho una gran Q, supongo que estaba trabajando en eso al mismo tiempo;)
brasofilo

Respuestas:

7

Puedes usar wp_generate_attachment_metadata:

Esta función genera metadatos para un archivo adjunto de imagen. También crea una miniatura y otros tamaños intermedios del archivo adjunto de la imagen en función de los tamaños definidos en Settings_Media_Screen.

El segundo argumento del filtro es el ID del archivo adjunto, por lo que no debería ser un problema agregar el meta mensaje:

add_filter( 'wp_generate_attachment_metadata', 'manipulate_metadata_wpse_91177', 10, 2 );

function manipulate_metadata_wpse_91177( $metadata, $attachment_id ) 
{
    // var_dump( $metadata['image_meta'] );
    // Credit is inside $metadata['image_meta']['credit']
    return $metadata;
}

Inspeccionando el contenido de $metadata['image_meta']con FirePHP, estos son los resultados:

aperture: 4
camera: "DMC-FZ100"
caption: ""
copyright: ""
created_timestamp: 1352136868
credit: ""
focal_length: "9.2"
iso: "100"
shutter_speed: "0.003125"
title: "Double Dip"

[Actualización]
Prueba completa agregando una columna personalizada en la pantalla Biblioteca de medios ( /wp-admin/upload.php) para mostrar la metainformación de la publicación:

add_filter( 'wp_generate_attachment_metadata', 'manipulate_metadata_wpse_91177', 10, 2 );
add_filter( 'manage_upload_columns', 'camera_info_column_wpse_91177' );
add_action( 'manage_media_custom_column', 'camera_info_display_wpse_91177', 10, 2 );

function manipulate_metadata_wpse_91177( $metadata, $attachment_id ) 
{
    update_post_meta( $attachment_id, 'photo_title', $metadata['image_meta']['title'] );
    update_post_meta( $attachment_id, 'photo_camera', $metadata['image_meta']['camera'] );
    return $metadata;
}

function camera_info_column_wpse_91177( $columns ) 
{
    $columns['cam_info'] = 'Camera Info';    
    return $columns;
}

function camera_info_display_wpse_91177( $column_name, $post_id ) 
{
    if( 'cam_info' != $column_name || !wp_attachment_is_image( $post_id ) )
        return;

    $title = get_post_meta( $post_id, 'photo_title', true );
    $camera = get_post_meta( $post_id, 'photo_camera', true );
    $echo_title = $title ? 'Title: ' . $title . '<br />' : '';
    $echo_camera = $camera ? 'Camera: ' . $camera : '';
    echo $echo_title . $echo_camera;
}

información de la cámara

Preguntas y respuestas algo relacionadas: cree una nueva categoría al guardar en función de la información de la publicación

brasofilo
fuente
Creo que entendí mal la pregunta que afortunadamente respondiste, estaba tratando de establecer el campo "crédito" en la sección del cuadro de medios para que el usuario final pudiera modificarlo si querían cambiarlo de lo que dijo el exif ... ..
Wyck
@brasofilo Gracias de nuevo. En una nota al margen, ¿por qué $ attach_id tiene que ser el segundo argumento del filtro? No funciona si es el primer argumento. No pude encontrar aclaraciones en los documentos add_filter.
edeneye
@ user955664, ¡ese es el camino del gancho o sigue la fuente, Luke !
brasofilo
@brasofilo Gracias, nuevamente. Tiene sentido al mirar la llamada apply_filters a wp_generate_attachment_metadata. Había estado mirando la función en sí, no la llamada a apply_filters.
edeneye