Simpan info kamera sebagai metadata pada unggahan gambar?

8

Saya mencoba agar WordPress secara otomatis menyimpan metadata "kredit" yang disimpan dalam gambar yang saya unggah. Saya tahu ini akan dimasukkan sebagai bidang meta pos kustom menggunakan update_post_meta().

Informasi "kredit" dikumpulkan oleh wp_read_image_metadata(), tetapi media_handle_upload()tidak menggunakannya. Hanya menggunakan informasi "keterangan" dan "judul" yang dikumpulkan dari gambar untuk post_contentdan post_titlemasing - masing.

Saya telah menemukan beberapa contoh cara menambahkan bidang metadata lampiran khusus setelah unggahan saat mengedit gambar, tetapi karena WP sudah mengumpulkan informasi ini dari metadata gambar, saya ingin mencari cara untuk menyimpannya sebagai gambar diunggah.

Saya tidak jelas tentang langkah apa yang harus dilakukan untuk menghubungkan media_handle_upload()(sepertinya tidak ada kaitan) sehingga saya dapat menelepon update_post_metauntuk menyimpan jalur "kredit" untuk lampiran.

edeneye
sumber
1
Ini adalah pertanyaan yang bagus, saya akan mencoba dan menjawabnya ketika saya punya waktu atau menambahkan hadiah untuk itu. Saya memang mencoba selama 15 menit dan menghasilkan beberapa kesalahan yang luar biasa terperinci seperti "kesalahan terjadi dalam pengunggahan. Silakan coba lagi nanti", meskipun itu berhasil.
Wyck
2
Hey @Wyck, memang Q yang bagus, saya kira saya sedang mengerjakannya pada saat yang sama;)
brasofilo

Jawaban:

7

Anda bisa menggunakan wp_generate_attachment_metadata:

Fungsi ini menghasilkan metadata untuk lampiran gambar. Itu juga membuat thumbnail dan ukuran perantara lampiran gambar berdasarkan ukuran yang ditentukan pada Settings_Media_Screen.

Argumen kedua filter adalah ID lampiran, jadi seharusnya tidak menjadi masalah untuk menambahkan meta pos:

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

Memeriksa konten $metadata['image_meta']dengan FirePHP, ini adalah hasilnya:

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

[Pembaruan]
Uji penuh menambahkan kolom khusus di layar Media Library ( /wp-admin/upload.php) untuk menampilkan info meta pos:

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

info kamera

Tanya Jawab terkait: Buat kategori baru setelah menyimpan berdasarkan informasi pos

brasofilo
sumber
Saya rasa saya salah paham pertanyaannya, untungnya Anda menjawab, saya mencoba untuk mengatur bidang "kredit" di bagian kotak media sehingga dapat diubah oleh pengguna akhir jika mereka ingin mengubahnya dari apa yang dikatakan exif .. baru saja ..
Wyck
@brasofilo Terima kasih lagi. Di samping catatan, mengapa $ attachment_id harus menjadi argumen kedua pada filter? Itu tidak berfungsi jika itu argumen pertama. Saya tidak dapat menemukan klarifikasi di dokumen add_filter.
edeneye
@ user955664, itulah Jalan Pengait atau Ikuti Sumbernya, Luke !
brasofilo
@ brasofilo Terima kasih, lagi. Masuk akal ketika melihat panggilan apply_filters ke wp_generate_attachment_metadata. Saya telah melihat fungsi itu sendiri, bukan panggilan apply_filters.
edeneye