Enregistrer les informations sur la caméra en tant que métadonnées lors du téléchargement d'images?

8

J'essaie que WordPress enregistre automatiquement les métadonnées de «crédit» qui sont stockées dans les images que je télécharge. Je sais que cela serait entré comme un champ méta personnalisé à l'aide de update_post_meta().

Les informations de "crédit" sont collectées par wp_read_image_metadata(), mais media_handle_upload()ne les utilisent pas. Il utilise uniquement les informations "légende" et "titre" recueillies à partir de l'image pour post_contentet post_titlerespectivement.

J'ai trouvé plusieurs exemples sur la façon d'ajouter des champs de métadonnées de pièce jointe personnalisés après le téléchargement lors de la modification de l'image, mais comme WP recueille déjà ces informations à partir des métadonnées de l'image, j'aimerais trouver un moyen de l'enregistrer en tant qu'image est téléchargé.

Je ne sais pas quelles étapes prendre pour se connecter media_handle_upload()(il ne semble pas y avoir de crochet) afin que je puisse appeler update_post_metapour enregistrer la ligne de "crédit" pour la pièce jointe.

edeneye
la source
1
C'est une excellente question, j'essaierai d'y répondre quand j'aurai le temps ou d'y ajouter une prime. J'ai essayé pendant 15 minutes et cela a produit des erreurs incroyablement détaillées comme "une erreur s'est produite lors du téléchargement. Veuillez réessayer plus tard", même si cela fonctionnait.
Wyck
2
Hé @Wyck, en effet un grand Q, je suppose que j'y travaillais en même temps;)
brasofilo

Réponses:

7

Vous pouvez utiliser wp_generate_attachment_metadata:

Cette fonction génère des métadonnées pour une pièce jointe d'image. Il crée également une miniature et d'autres tailles intermédiaires de la pièce jointe d'image en fonction des tailles définies sur Settings_Media_Screen.

Le deuxième argument du filtre est l'ID de pièce jointe, donc cela ne devrait pas être un problème pour ajouter la méta post:

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

En inspectant le contenu de $metadata['image_meta']FirePHP, voici les résultats:

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

[Mise à jour]
Test complet ajoutant une colonne personnalisée dans l'écran de la bibliothèque multimédia ( /wp-admin/upload.php) pour afficher les méta-informations du 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;
}

informations sur la caméra

Questions et réponses quelque peu liées: créer une nouvelle catégorie lors de l'enregistrement en fonction des informations de publication

brasofilo
la source
Je pense que j'ai mal compris la question à laquelle vous avez répondu heureusement, j'essayais de définir le champ "crédit" dans la section de la boîte des médias afin qu'il puisse être modifié par l'utilisateur final s'il voulait le changer par rapport à ce que l'exif avait dit. ..
Wyck
@brasofilo Merci encore. En passant, pourquoi $ attachment_id doit-il être le deuxième argument du filtre? Cela ne fonctionne pas si c'est le premier argument. Je n'ai pas pu trouver de clarification dans les documents add_filter.
edeneye
@ user955664, c'est la voie du crochet ou suivez la source, Luke !
brasofilo
@brasofilo Merci encore. Cela a du sens lorsque vous regardez l'appel apply_filters à wp_generate_attachment_metadata. J'avais regardé la fonction elle-même, pas l'appel apply_filters.
edeneye