Lưu thông tin máy ảnh dưới dạng siêu dữ liệu khi tải lên hình ảnh?


8

Tôi đang cố gắng để WordPress tự động lưu siêu dữ liệu "tín dụng" được lưu trữ trong các hình ảnh tôi đang tải lên. Tôi biết điều này sẽ được nhập dưới dạng một trường meta bài tùy chỉnh bằng cách sử dụng update_post_meta().

Thông tin "tín dụng" được thu thập bởi wp_read_image_metadata(), nhưng media_handle_upload()không sử dụng thông tin đó. Nó chỉ sử dụng thông tin "chú thích" và "tiêu đề" được thu thập từ hình ảnh cho post_contentpost_titletương ứng.

Tôi đã tìm thấy một số ví dụ về cách thêm các trường siêu dữ liệu đính kèm tùy chỉnh sau khi tải lên khi chỉnh sửa hình ảnh, nhưng vì WP đã thu thập thông tin này từ siêu dữ liệu của hình ảnh, tôi muốn tìm cách lưu nó dưới dạng hình ảnh được tải lên.

Tôi không rõ những bước cần thực hiện để móc vào media_handle_upload()(dường như không có móc nối) để tôi có thể gọi update_post_metađể lưu dòng "tín dụng" cho tệp đính kèm.


1
Đây là một câu hỏi tuyệt vời, tôi sẽ thử và trả lời nó khi tôi có thời gian hoặc thêm tiền thưởng cho nó. Tôi đã thử trong 15 phút và nó đã tạo ra một số lỗi chi tiết đáng kinh ngạc như "lỗi xảy ra trong quá trình tải lên. Vui lòng thử lại sau", mặc dù nó đã hoạt động.
Wyck

2
Xin chào @Wyck, thực sự là một Q tuyệt vời, tôi đoán rằng tôi đã làm việc với nó cùng một lúc;)
brasofilo

Câu trả lời:


7

Bạn có thể sử dụng wp_generate_attachment_metadata:

Hàm này tạo siêu dữ liệu cho tệp đính kèm hình ảnh. Nó cũng tạo ra một hình thu nhỏ và các kích thước trung gian khác của tệp đính kèm hình ảnh dựa trên các kích thước được xác định trên Settings_Media_Screen.

Đối số thứ hai của bộ lọc là ID tệp đính kèm, do đó không nên thêm vấn đề khi thêm meta bài đăng:

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

Kiểm tra nội dung của $metadata['image_meta']với FirePHP, đây là các kết quả:

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

[Cập nhật]
Kiểm tra đầy đủ thêm một cột tùy chỉnh trong màn hình Thư viện phương tiện ( /wp-admin/upload.php) để hiển thị thông tin meta bài đăng:

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

thông tin máy ảnh

Một số câu hỏi và trả lời liên quan: Tạo danh mục mới khi lưu dựa trên thông tin bài đăng


Tôi nghĩ rằng tôi đã hiểu sai câu hỏi rất may bạn đã trả lời, tôi đã cố gắng đặt trường "tín dụng" trong phần hộp phương tiện để người dùng cuối có thể thay đổi nó nếu họ muốn thay đổi nó từ những gì exif đã nói. ..
Wyck 17/03/13

@brasofilo Cảm ơn một lần nữa. Trên một lưu ý phụ, tại sao $ Attach_id phải là đối số thứ hai trên bộ lọc? Nó không hoạt động nếu đó là đối số đầu tiên. Tôi không thể tìm thấy sự làm rõ trong các tài liệu add_filter.
edeneye 17/03/13


@brasofilo Cảm ơn, một lần nữa. Thật ý nghĩa khi nhìn vào lệnh gọi application_filters tới wp_generate_attachment_metadata. Tôi đã xem xét chức năng của chính nó, không phải là lệnh gọi application_filters.
edeneye 17/03/13
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.