web-dev-qa-db-fra.com

Comment obtenir un identifiant d'image à utiliser dans wp_read_image_metadata ()?

Je souhaite que le texte alternatif soit automatiquement identique au titre d'un message lorsque l'image est téléchargée. J'ai trouvé cette fonction qui fonctionne bien pour la définition de la légende.

Pour mettre à jour le texte alternatif, j’ai besoin d’utiliser update_post_meta($image_id, '_wp_attachment_image_alt', $post_title);, mais comment puis-je obtenir l’image id? Comment puis-je même faire var_dump () à l'intérieur de ce filtre?

/**
 * Add the Media/Image filename to caption, Title
 *
 */
function wpsx_5505_modify_uploaded_file_meta($meta, $file, $sourceImageType) {

    // Get the parent post ID, if there is one
    if( isset($_REQUEST['post_id']) ) {
        $post_id = $_REQUEST['post_id'];
    } else {
        $post_id = false;
    }

    // Only do this if we got the post ID--otherwise they're probably in
    //  the media section rather than uploading an image from a post.
    if($post_id && is_numeric($post_id)) {

        // Get the post title
        $post_title = get_the_title($post_id);

        // If we found a title
        if($post_title) {

            $meta['caption'] = $post_title;

        }

    }

    return $meta;

}
add_filter('wp_read_image_metadata', 'wpsx_5505_modify_uploaded_file_meta', 1, 3);

https://stackoverflow.com/a/39683724/2769517

1
Marko

Je souhaite que le texte alternatif soit automatiquement identique au titre d'un message lorsque l'image est téléchargée.

L'image de la pièce jointetexte alternatifest stockée dans la table meta méta sous la clé méta _wp_attachment_image_alt.

Dans media_handle_upload() et media_handle_sideload() nous avons:

$id = wp_insert_attachment($attachment, $file, $post_id);
if ( !is_wp_error($id) )
    wp_update_attachment_metadata( $id, wp_generate_attachment_metadata( $id, $file ) );

La wp_insert_attachment() est une enveloppe pour wp_insert_post() et le add_attachment est déclenché après que la pièce jointe a été écrite dans la table posts.

Exemple

Voici un moyen de définir automatiquement le texte de remplacement en tant quetitlede la publication parent attachée, lors du téléchargement, via le hook add_attachment:

/**
 * Set the attachment image alt as the parent post's title, during upload
 */

add_action( 'add_attachment', function( $attachment_id )
{
    // Nothing to do if it's not an image
    if( ! wp_attachment_is_image( $attachment_id ) )
        return;

    // Get parent post's ID for the image
    $parent_id = wp_get_post_parent_id( $attachment_id );

    // Nothing to do if the image isn't attached to a post
    if( ! $parent_id )
        return;

    // Get parent post's title
    $parent_title = get_the_title( $parent_id );

    // Nothing to do if the attached post has no title
    if( empty( $parent_title ) )
        return;

    // Set the image alt as the parent post's title
    update_post_meta( $attachment_id, '_wp_attachment_image_alt', $parent_title );

} );

Notes

Notez que nous ne voulons pas ajouter la clé _wp_attachment_image_alt à toutes les pièces jointes, c'est pourquoi nous utilisons wp_attachment_is_image() pour cibler uniquement les images.

Nous pourrions également accrocher le code wp_update_attachment_metadata ou wp_generate_attachment_metadata de manière similaire, l'ID de la pièce jointe étant transmis comme second argument d'entrée du filtre.

La wp_read_image_metadata() est appelée dans wp_generate_attachment_metadata() par exemple. récupérer les données EXIF ​​et IPTC. C’est là que l’OP s’accroche actuellement.

Notez également que lorsque le titre de l'article parent est modifié, le texte de remplacement est désynchronisé. Dans une question quelque peu liée, j'ai discuté de certaines options ici .

2
birgire