Salvar informações da câmera como metadados no upload de imagens?


8

Estou tentando fazer com que o WordPress salve automaticamente os metadados de "crédito" armazenados nas imagens que estou carregando. Eu sei que isso seria inserido como um campo personalizado de meta meta usando update_post_meta().

As informações de "crédito" são coletadas por wp_read_image_metadata(), mas media_handle_upload()não as usam. Ele usa apenas as informações "legenda" e "título" coletadas da imagem para post_contente post_titlerespectivamente.

Encontrei vários exemplos de como adicionar campos de metadados de anexo personalizados após o upload ao editar a imagem, mas como o WP já está coletando essas informações a partir dos metadados da imagem, gostaria de encontrar uma maneira de salvá-la como imagem. é carregado.

Não sei ao certo quais etapas devem ser tomadas media_handle_upload()(não parece haver um gancho) para que eu possa ligar update_post_metapara salvar a linha de "crédito" do anexo.


1
Esta é uma ótima pergunta, tentarei respondê-la quando tiver tempo ou acrescentarei uma recompensa a ela. Tentei por 15 minutos e produziu alguns erros surpreendentemente detalhados, como "ocorreu um erro no upload. Tente novamente mais tarde", mesmo que estivesse funcionando.
21713 Wyck

2
Hey @Wyck, de fato uma grande Q, eu acho que eu estava trabalhando nele ao mesmo tempo;)
brasofilo

Respostas:


7

Você pode usar wp_generate_attachment_metadata:

Esta função gera metadados para um anexo de imagem. Ele também cria uma miniatura e outros tamanhos intermediários do anexo da imagem, com base nos tamanhos definidos na tela Settings_Media_Screen.

O segundo argumento do filtro é o ID do anexo, portanto, não deve ser um problema para adicionar a meta post:

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;
}

Inspecionando o conteúdo do $metadata['image_meta']FirePHP, estes são os 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"

[Atualização]
Teste completo adicionando uma coluna personalizada na tela Biblioteca de mídia ( /wp-admin/upload.php) para exibir as informações meta post:

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;
}

informações da câmera

Perguntas e respostas um pouco relacionadas: Crie uma nova categoria ao salvar, com base nas informações da postagem


Acho que entendi mal a pergunta, felizmente você respondeu, estava tentando definir o campo "crédito" na seção da caixa de mídia para que pudesse ser alterado pelo usuário final se eles quisessem alterá-la do que o exif dizia .. ufa ..
Wyck 17/03

@brasofilo Obrigado novamente. Em uma nota lateral, por que $ attachment_id tem que ser o segundo argumento no filtro? Não funciona se for o primeiro argumento. Não consegui encontrar esclarecimentos nos documentos add_filter.
edeneye

@ user955664, esse é o caminho do gancho ou siga a fonte, Luke !
brasofilo

@brasofilo Obrigado, novamente. Faz sentido ao examinar a chamada apply_filters para wp_generate_attachment_metadata. Eu estava olhando para a função em si, não para a chamada apply_filters.
edeneye
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.