问题描述
我试图让 WordPress 自动保存我正在上传的图像中存储的”credit” 元数据。我知道这将使用 update_post_meta()
作为自定义后期元字段输入。
「信用」 信息由 wp_read_image_metadata()
收集,但 media_handle_upload()
不使用。它仅分别使用从 post_content
和 post_title
的图像收集的 「标题」 和 「标题」 信息。
我已经找到了几个例子,说明如何在编辑图像之后添加自定义附件元数据字段,但是由于 WP 已经从图像的元数据中收集了这些信息,所以我想找到一种将其保存为图像的方法已上传。
我不清楚 media_handle_upload()
(似乎没有挂钩) 要采取哪些步骤,以便我可以调用 update_post_meta
来保存附件的”credit” 行。
最佳解决方案
您可以使用 wp_generate_attachment_metadata
:
This function generates metadata for an image attachment. It also creates a thumbnail and other intermediate sizes of the image attachment based on the sizes defined on the Settings_Media_Screen.
过滤器的第二个参数是附件 ID,因此添加帖子元素不应该是一个问题:
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;
}
使用 FirePHP 检查 $metadata['image_meta']
的内容,结果如下:
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;
}
一些有关 Q& A:Create new category upon save based on post information
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。