将相机信息另存为元数据上载图像?


8

我正在尝试让WordPress自动保存存储在我上传的图像中的“信用”元数据。我知道可以使用将此作为自定义帖子元字段输入update_post_meta()

“信用”信息由收集wp_read_image_metadata(),但media_handle_upload()不使用。它仅将从图像收集的“标题”和“标题”信息分别用于post_contentpost_title

我发现了几个示例,这些示例说明了在编辑图像时上传如何添加自定义附件元数据字段,但是由于WP已经从图像的元数据中收集了此信息,因此我想找到一种方法将其另存为图像已上传。

我不清楚要采取哪些步骤进行挂钩media_handle_upload()(似乎没有挂钩),以便我可以调用update_post_meta以保存附件的“贷方”行。


1
这是一个很好的问题,我会在有空的时候尝试回答,或者在其中添加赏金。我确实尝试了15分钟,但它仍然产生了一些非常详细的错误,例如“上传时发生错误。请稍后重试”。
Wyck

2
嘿@Wyck,确实是个很棒的问题,我想我正在同时研究它;)
brasofilo

Answers:


7

您可以使用wp_generate_attachment_metadata

此功能生成图像附件的元数据。它还根据Settings_Media_Screen上定义的尺寸创建缩略图和图像附件的其他中间尺寸。

过滤器的第二个参数是附件ID,因此添加post meta应该不是问题:

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

$metadata['image_meta']使用FirePHP 检查的内容,结果如下:

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

[更新]
完整测试,在“媒体库”屏幕(/wp-admin/upload.php)中添加自定义列以显示帖子元信息:

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

相机资讯

常见问题与解答:根据帖子信息保存后创建新类别


我想我感谢您回答了这个问题,我误解了我的意思,我试图在媒体框部分设置“信用”字段,以便最终用户可以更改它,如果他们希望根据exif的内容进行更改。 ..
Wyck

@brasofilo再次感谢。另外,为什么$ attachment_id必须是过滤器的第二个参数?如果是第一个参数,它将不起作用。我无法在add_filter文档中找到说明。
edeneye

@ user955664,这就是“钩子”或“ 追根溯源”卢克
brasofilo

@brasofilo再次感谢。在查看对wp_generate_attachment_metadata的apply_filters调用时,这很有意义。我一直在看函数本身,而不是apply_filters调用。
edeneye
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.