問題描述

我試圖讓 WordPress 自動儲存我正在上傳的影像中儲存的”credit” 後設資料。我知道這將使用 update_post_meta()作為自定義後期元欄位輸入。

「信用」 資訊由 wp_read_image_metadata()收集,但 media_handle_upload()不使用。它僅分別使用從 post_contentpost_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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。