web-dev-qa-db-fra.com

Comment puis-je obtenir des images (avec un aperçu miniature) à afficher dans les résultats de recherche?

La version courte

J'ai construit un site Wordpress (base de thèmes de la Gazette) avec de nombreux supports d'images. Tous ont des descriptions, des légendes et des titres, mais n'apparaissent pas dans les résultats de recherche; en utilisant Relevanssi je pouvais faire apparaître leur titre et description, mais aucune image n’a été affichée! Comment faire en sorte que le contenu des images apparaisse dans les résultats de la recherche avec les vignettes?

Contexte:

J'ai construit un site Web de portefeuille de produits pour un forgeron. Chaque page comporte plusieurs galeries d’images: par exemple, "Pièces personnalisées" contient différents types de couteaux, d’épées et d’autres pièces portant des noms uniques, "Axes" comporte différents axes standard, etc. Parce que les clients recherchent peut-être une description particulière sans savoir où elle réside, ils effectueront probablement beaucoup de recherches. J'ai toutefois constaté que la recherche par défaut de Wordpress n'était pas très utile et excluait complètement les médias d'image. Si je recherche "Damas", par exemple, je n’obtiendrais aucun résultat malgré des dizaines d’images avec Damascus dans la légende, la description et le titre! J'ai installé Relevanssi, qui fait en sorte que tous les médias pertinents apparaissent dans les résultats de la recherche, mais aucune des images ne s'affiche réellement:

 enter image description here 

Si la recherche trouve un article, une page ou un autre élément avec une image sélectionnée, la vignette de l'image apparaît. Comme les images ne semblent pas avoir ce champ, je ne sais pas comment leur faire afficher une vignette. Je ne connais tout simplement pas assez l'API Wordpress pour savoir où regarder ou quoi faire. De quels appels PHP ai-je besoin pour faire apparaître ces images ou existe-t-il un plug-in qui fait exactement ce que je recherche? (Je ne suis pas un développeur Web, mais j'ai une formation en génie logiciel et une expérience Web de base.)

Merci d'avance!

1
Dylan Knowles

C’est quelque chose qui devra être traité dans le modèle de résultats de recherche de votre thème. Si le thème est disponible, il ne prendra probablement pas en charge les images miniatures pour les pièces jointes car, comme vous l'avez déjà vu, les pièces jointes n'apparaissent généralement pas dans les résultats de la recherche.

En effet, dans un thème normal, chaque résultat utilisera la fonction the_post_thumbnail() pour afficher la vignette. Sous le capot, l’image présentée est une publication de type pièce jointe. Cette fonction obtient l'ID de l'image sélectionnée de la publication et l'utilise dans wp_get_attachment_image() , qui génère l'image/la vignette d'une pièce jointe.

Étant donné que les publications en pièce jointe ne possèdent pas ont une image sélectionnée, étant donné qu’elles sont déjà des pièces jointes, cette fonction n’affiche rien.

Par conséquent, pour afficher l'image d'un message en pièce jointe, le modèle doit vérifier si le message est une pièce jointe. Dans ce cas, ignorez the_post_thumbnail() et allez directement à wp_get_attachment_image() avec son propre identifiant. Vous pouvez voir dans cet exemple que c'est ainsi que le modèle de pièce jointe affiche l'image.

En pratique, cela ressemblerait à quelque chose comme:

if ( get_post_type() === 'attachment' ) {
    echo wp_get_attachment_image( get_the_ID(), 'large' );
} else {
    the_post_thumbnail( 'large' );
}

La taille exacte de l'image à utiliser à la place de 'large' dépend de ce que votre thème utilise déjà.

Cela impliquerait de modifier vos fichiers de thème, et le fichier exact dépend du thème d'origine. Vous devrez vérifier vos fichiers de thème par rapport à Hiérarchie des modèles pour voir quels fichiers sont réellement utilisés. Quel que soit le fichier, vous devez apporter vos modifications en créant un Thème de l'enfant . Cela garantira que le changement est à l'abri des mises à jour de votre thème, ce qui effacerait normalement tout changement.

Une autre méthode qui ne nécessite pas de modification de modèles (mais qui nécessite néanmoins de créer un thème enfant ou un plug-in personnalisé pour y insérer le code) consiste à filtrer la demande d'ID de vignette de publication.

Au fond, the_post_thumbnail() utilise get_post_meta( $post->ID, '_thumbnail_id', true ); pour obtenir l'ID de la pièce jointe qui est l'image sélectionnée pour le message. Vous pouvez filtrer cela de manière à ce que si WordPress demande cette valeur méta pour un message et que le message soit une pièce jointe, renvoyez à la place l'ID de la pièce jointe.

Vous pouvez le faire avec le filtre get_post_metadata :

function wpse_300128_attachment_post_thumbnail( $value, $post_id, $meta_key, $single ) {
    if ( get_post_type( $post_id ) === 'attachment' && $meta_key === '_thumbnail_id' ) {
        return $single ? $post_id : array( $post_id );
    }
}
add_filter( 'get_post_metadata', 'wpse_300128_attachment_post_thumbnail', 10, 4 );

Lorsque ce filtre est activé, chaque fois que WordPress tente d’obtenir l’ID de vignette d’une publication en pièce jointe, il reçoit l’ID à la place. La valeur de retour est soit simplement l'ID, soit un tableau contenant l'ID basé sur la valeur $single. Cela a pour résultat que le résultat correspond au format attendu, que l'appel initial ait la valeur $single définie sur true ou la valeur false.

2
Jacob Peattie