web-dev-qa-db-fra.com

Conversion de mots clés IPTC en tags de publication de blog

Je suis un débutant en ce qui concerne wp ou le codage ou quelque chose du genre, mais je parviens à faire les choses avec un peu de lecture. J'ai besoin d'un moyen de convertir les mots-clés extraits par IPTC qui sont attachés à son fichier multimédia en balises de publication.

Ceci est mon flux de travail - je télécharge une image, une image est jointe à un message en tant qu'image sélectionnée, elle est marquée d'un filigrane, elle est liée à la taille originale. L'image elle-même comporte des mots-clés, nom, description, etc.

Tout est presque automatisé. Télécharger avec le programme de téléchargement multimédia, tout ce qui précède se passe sur le pilote automatique, sauf que je dois copier les mots-clés du fichier multimédia de la page multimédia vers les balises de cet article de blog.

Est-il possible d'assigner des mots-clés à partir d'une image associée à un article pour s'ajouter automatiquement aux tags de cet article de blog?

3
Mirko Pernjakovic

WordPres a une fonction qui extrait les informations IPTC des images, cette fonction est wp_read_image_metadata. Cette fonction n’est disponible que du côté administrateur et, conformément au codex , elle n’extrait pas les mots-clés IPTC. Mais vous pouvez utiliser iptcparse à partir de PHP vous-même pour extraire les mots-clés IPTC et les définir en tant que balises de publication.

Dans votre question, vous avez dit que vous avez déjà automatisé le processus pour attacher l'image en tant qu'image sélectionnée de la publication. Vous pouvez ainsi saisir facilement l'ID de l'image et l'ID de la publication au cours de cette procédure. Une fois que vous avez attaché l'image à la publication, enregistrez l'ID de la publication dans $post_ID et l'ID de l'image dans $image_ID. Vous pourrez alors procéder de la manière suivante:

$image = getimagesize( get_attached_file( $image_ID ), $info );

if( isset( $info['APP13'] ) ) {

   $iptc = iptcparse( $info['APP13'] );

   // 2#025 is the key in the iptc array for keywords
   if( isset( $iptc['2#025'] ) && is_array( $iptc['2#025'] ) ) {

        // Last param is true to append these tags to existing tags,
        // set it to false to replace existing tags
        // See https://codex.wordpress.org/Function_Reference/wp_set_post_tags
        wp_set_post_tags( $post_ID, $iptc['2#025'], true );

   }

}

Si vous définissez l'image sélectionnée à l'aide de la fonction set_post_thumbnail (en utilisant l'écran d'édition de publication pour définir l'image sélectionnée, utilisez également cette fonction), vous pouvez associer le code ci-dessus à l'action updated_post_meta (set_post_thumbnail utiliser des métadonnées pour définir l'image sélectionnée):

add_action( 'updated_post_meta', function( $meta_id, $object_id, $meta_key, $_meta_value ) {

    // Check that meta 
    if( $meta_key == '_thumbnail_id' ) {

        $image = getimagesize( get_attached_file( $_meta_value ), $info );

        if( isset( $info['APP13'] ) ) {

            $iptc = iptcparse( $info['APP13'] );

            if( isset( $iptc['2#025'] ) && is_array( $iptc['2#025'] ) ) {

                wp_set_post_tags( $object_id, $iptc['2#025'], true );

            }

        }


    }

}, 10, 4 );

Note : code non testé. Juste écrit ici. Vous devrez peut-être gérer également lorsque l'image sélectionnée est supprimée ou modifiée.

Note2 : J'ai relu votre question et remarque que vous êtes (en vous citant) "débutant en ce qui concerne wp ou le codage ou quelque chose du genre". Vous n'êtes pas sûr de comprendre le code ci-dessus et je pense que le second bloc de code peut vous être plus utile que le premier.

3
cybmeta