Salvare le informazioni sulla fotocamera come metadati sul caricamento delle immagini?


8

Sto cercando di far sì che WordPress salvi automaticamente i metadati di "credito" memorizzati nelle immagini che sto caricando. So che questo verrebbe inserito come meta campo post personalizzato usando update_post_meta().

Le informazioni sul "credito" vengono raccolte da wp_read_image_metadata(), ma media_handle_upload()non le utilizzano. Utilizza solo le informazioni "didascalia" e "titolo" raccolte dall'immagine per post_contente post_titlerispettivamente.

Ho trovato diversi esempi su come aggiungere campi di metadati di allegati personalizzati dopo il caricamento durante la modifica dell'immagine, ma poiché WP sta già raccogliendo queste informazioni dai metadati dell'immagine, mi piacerebbe trovare un modo per salvarlo come immagine è caricato.

Non sono chiaro quali passi adottare per agganciare media_handle_upload()(non sembra esserci un gancio) in modo da poter chiamare update_post_metaper salvare la linea di "credito" per l'allegato.


1
Questa è un'ottima domanda, proverò a rispondere quando avrò tempo o aggiungerò una generosità. Ho provato per 15 minuti e ha prodotto alcuni errori incredibilmente dettagliati come "si è verificato un errore nel caricamento. Riprova più tardi", anche se funzionava.
Wyck,

2
Ehi @Wyck, davvero un ottimo Q, immagino che ci stavo lavorando allo stesso tempo;)
brasofilo

Risposte:


7

Puoi usare wp_generate_attachment_metadata:

Questa funzione genera metadati per un allegato di immagine. Crea anche una miniatura e altre dimensioni intermedie dell'allegato dell'immagine in base alle dimensioni definite in Settings_Media_Screen.

Il secondo argomento del filtro è l'ID allegato, quindi non dovrebbe essere un problema aggiungere il meta meta:

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

Ispezionando il contenuto di $metadata['image_meta']FirePHP, questi sono i risultati:

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

[Aggiornamento]
Test completo con l'aggiunta di una colonna personalizzata nella schermata Libreria multimediale ( /wp-admin/upload.php) per visualizzare le informazioni meta post:

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

informazioni sulla fotocamera

Domande e risposte in qualche modo correlate: crea una nuova categoria dopo il salvataggio in base alle informazioni sul post


Penso di aver capito male la domanda per fortuna hai risposto, stavo cercando di impostare il campo "credito" nella sezione del box multimediale in modo che potesse essere modificato dall'utente finale se volesse cambiarlo da ciò che l'exif ha detto ... ..
Wyck,

@brasofilo Grazie ancora. In una nota a margine, perché $ attachment_id deve essere il secondo argomento sul filtro? Non funziona se è il primo argomento. Non sono stato in grado di trovare chiarimenti nei documenti add_filter.
Edeneye,

@ user955664, questa è la via dell'amo o segui la fonte, Luke !
brasofilo,

@brasofilo Grazie, ancora. Ha senso guardando la chiamata apply_filters a wp_generate_attachment_metadata. Stavo guardando la funzione stessa, non la chiamata apply_filters.
Edeneye,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.