Chaque fois que je poste un article avec une image sélectionnée, je souhaite extraire les données exif de cette image et les attacher en tant que terme pour taxonomie. J'ai déjà un plugin qui peut extraire les informations pertinentes, mais je ne sais pas où et quand appeler wp_set_object_terms
Est-ce que quelqu'un peut-il me montrer la bonne direction?
Comme "un plugin" ne va pas aider les visiteurs ultérieurs, commençons par récupérer comment:
# Get the post ID: Use one of the following. Preferred is the API function get_the_ID()
# $GLOBALS['post']->ID;
# global $post; $post->ID;
# get_the_ID();
$meta = wp_get_attachment_metadata( get_the_ID(), false );
# Fetch the EXIF data part
$exif = $meta['image_meta'];
Maintenant, nous avons les données EXIF enregistrées dans $exif
- pour vous assurer que nous ne sommes pas piratés avec une image, n'oubliez pas d'échapper/de désinfecter les données avant de les afficher (ou mieux: de les enregistrer).
# List of EXIF data entries:
$created = date_i18n(
get_option( 'date_format' ),
strtotime( $meta['created_timestamp'] )
);
$copyright = filter_var( $meta['copyright'] );
$credit = filter_var( $meta['credit'] );
$title = filter_var( $meta['title'] );
$camera = filter_var( $meta['camera'] );
$shutter = number_format_i18n( filter_var(
$meta['shutter_speed'],
FILTER_SANITIZE_NUMBER_FLOAT
), 2 );
$iso = number_format_i18n( filter_var(
$meta['iso'],
FILTER_SANITIZE_NUMBER_FLOAT
) );
$focal = number_format_i18n( filter_var(
$meta['focal_length'],
FILTER_SANITIZE_NUMBER_FLOAT
), 2 );
$aperture = filter_var( $meta['aperture'] );
Ceci peut arriver (ou dans presque tous les cas) dans l’administrateur, nous devrons utiliser les hooks présents:
add_attachment
(arg: $att_id
)edit_attachment
(arg: $att_id
)où les deux sont déclenchés après (quoi d'autre) une image a été téléchargée ou modifiée.
Ensuite il y a
media_send_to_editor
(args: $html, $send_id, $attachment
)attachment_fields_to_save
(args: $post, $attachment
)(plus d'infos dans cette réponse )
Donc, la seule chose à faire est de
ajoutez le terme utilisant wp_set_object_terms()
à la taxonomie de votre choix et publiez un rappel attaché au filtre ou au hook que vous avez choisi ci-dessus:
$terms = wp_set_object_terms(
get_the_ID(),
array( $meta['copyright'] ),
'your-taxonomy',
# Do *append* the new term and not replace all others with it!
TRUE
);
# DEBUG:
if ( is_wp_error( $terms ) )
exit( $terms->get_error_message() );
var_dump( $terms ); // should be an array of terms
Vous devriez toujours vérifier la valeur de retour (comme je l'ai fait avec is_wp_error()
) lors du traitement de quelque chose. Si vous voulez être Nice et que des erreurs puissent survenir en raison de données EXIF manquantes, vous devez également intervenir et fournir quelques informations aux utilisateurs, par exemple une notification de l'administrateur.