画像のアップロード時にカメラ情報をメタデータとして保存しますか?


8

アップロードしている画像内に保存されている「クレジット」メタデータをWordPressに自動的に保存させようとしています。これは、を使用してカスタム投稿メタフィールドとして入力されることを知っていupdate_post_meta()ます。

「クレジット」情報はによって収集されますがwp_read_image_metadata()media_handle_upload()使用されません。それだけのために、画像から集められた「キャプション」と「タイトル」の情報使用post_contentしてpost_title、それぞれを。

画像の編集時にアップロード後にカスタム添付メタデータフィールドを追加する方法の例をいくつか見つけましたが、WPは既に画像のメタデータからこの情報を収集しているため、画像として保存する方法を見つけたいと思いますアップロードされました。

添付ファイルの「credit」行を保存するためにmedia_handle_upload()呼び出すことができるように、フックするために実行する手順(フックではないようです)がわかりませんupdate_post_meta


1
これは素晴らしい質問です。時間があるとき、またはそれに賞金を加えるときに、私はそれを試して答えます。15分間試してみたところ、「アップロードでエラーが発生しました。しばらくしてからもう一度お試しください」などの驚くほど詳細なエラーが発生しましたが、機能していたにもかかわらずです。
Wyck

2
ちょっと@Wyck、確かに素晴らしいQ、私は同時にそれに取り組んでいたと思います;)
brasofilo

回答:


7

使用できますwp_generate_attachment_metadata

この関数は、画像添付ファイルのメタデータを生成します。また、Settings_Media_Screenで定義されたサイズに基づいて、画像添付ファイルのサムネイルおよびその他の中間サイズを作成します。

フィルターの2番目の引数は添付ファイル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;
}

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

カメラ情報

やや関連するQ&A:投稿情報に基づいて、保存時に新しいカテゴリを作成します


私がメディアボックスセクションの「credit」フィールドを設定して、エンドユーザーがexifの発言から変更したい場合に変更できるようにするために、回答してくれてありがとうと誤解したと思います。 ..
Wyck

@brasofiloありがとうございます。余談ですが、なぜ$ attachment_idがフィルターの2番目の引数でなければならないのですか?最初の引数の場合は機能しません。add_filterのドキュメントで説明が見つかりませんでした。
edeneye 2013年


@brasofiloありがとうございます。wp_generate_attachment_metadataへのapply_filters呼び出しを見ると、理にかなっています。私は、apply_filters呼び出しではなく、関数自体を見ていました。
edeneye 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.