Kamerainformationen beim Hochladen von Bildern als Metadaten speichern?

8

Ich versuche, WordPress die "Kredit" -Metadaten, die in den von mir hochgeladenen Bildern gespeichert sind, automatisch speichern zu lassen. Ich weiß, dass dies als benutzerdefiniertes Post-Meta-Feld mit eingegeben werden würde update_post_meta().

Die "Kredit" -Informationen werden von gesammelt wp_read_image_metadata(), aber media_handle_upload()nicht verwendet. Es verwendet nur den „Titel“ und „Titel“ Informationen aus dem Bild versammeln post_contentund post_titlejeweils.

Ich habe einige Beispiele für das Hinzufügen von Metadatenfeldern für benutzerdefinierte Anhänge nach dem Hochladen beim Bearbeiten des Bilds gefunden. Da WP diese Informationen jedoch bereits aus den Metadaten des Bildes sammelt, möchte ich einen Weg finden, sie als Bild zu speichern wird hochgeladen.

Ich bin mir media_handle_upload()nicht sicher , in welche Schritte ich mich einhängen soll (es scheint keinen Haken zu geben), damit ich anrufen kann update_post_meta, um die "Kredit" -Linie für den Anhang zu speichern.

edeneye
quelle
1
Dies ist eine großartige Frage. Ich werde versuchen, sie zu beantworten, wenn ich Zeit habe, oder eine Prämie hinzufügen. Ich habe es 15 Minuten lang versucht und es entstanden einige erstaunlich detaillierte Fehler wie "Beim Hochladen ist ein Fehler aufgetreten. Bitte versuchen Sie es später erneut", obwohl es funktionierte.
Wyck
2
Hey @Wyck, in der Tat ein tolles Q, ich glaube ich habe zur gleichen Zeit daran gearbeitet;)
brasofilo

Antworten:

7

Sie können verwenden wp_generate_attachment_metadata:

Diese Funktion generiert Metadaten für einen Bildanhang. Außerdem werden eine Miniaturansicht und andere Zwischengrößen des Bildanhangs basierend auf den auf dem Bildschirm "Settings_Media_Screen" definierten Größen erstellt.

Das zweite Argument des Filters ist die Anhangs-ID, daher sollte es kein Problem sein, das Post-Meta hinzuzufügen:

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']Wenn Sie den Inhalt von FirePHP überprüfen, sind dies die Ergebnisse:

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

[Update]
Vollständiger Test zum Hinzufügen einer benutzerdefinierten Spalte im Bildschirm "Medienbibliothek" ( /wp-admin/upload.php), um die Post-Meta-Informationen anzuzeigen:

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

Kamera Info

Etwas verwandte Fragen und Antworten: Erstellen Sie beim Speichern eine neue Kategorie basierend auf den Post-Informationen

brasofilo
quelle
Ich glaube, ich habe die Frage, die Sie zum Glück beantwortet haben, falsch verstanden. Ich habe versucht, das Feld "Kredit" im Bereich "Medienbox" so einzustellen, dass es vom Endbenutzer geändert werden kann, wenn er es von dem ändern möchte, was das Exif gesagt hat ..
Wyck
@brasofilo Nochmals vielen Dank. Nebenbei bemerkt, warum muss $ attachment_id das zweite Argument im Filter sein? Es funktioniert nicht, wenn es das erste Argument ist. Ich konnte in den add_filter-Dokumenten keine Klarstellung finden.
Edeneye
@ user955664, das ist der Weg des Hakens oder folge der Quelle, Luke !
brasofilo
@brasofilo Nochmals vielen Dank. Dies ist sinnvoll, wenn Sie sich den Aufruf von apply_filters für wp_generate_attachment_metadata ansehen. Ich hatte mir die Funktion selbst angesehen, nicht den Aufruf von apply_filters.
Edeneye