Obtenir l'attribut titre / alt de l'image depuis le shortcode de la galerie
1 réponses
- votes
-
- 2015-04-26
Unpeu de contexte: WP stocke lespiècesjointes dans lamêmetable debase de données que les articles. Par conséquent,les lignes dutableau correspondent aux champs dumodal d'éditionmultimédia:
get_post_gallery_images
vous renverra les URL desimages,maispas les données réelles de labase de données. Vouspouvezeffectuer une requêteinverséeet rechercher lesmessages contenant l'URL de l'image mais ce seraitplus difficile quenécessaire.Utilisez à laplace lafonction get_post_gallery . Celui-ciest également utilisépar
get_post_gallery_images
,mais renvoie également les ID despiècesjointes dans untableau. Utilisez cesidentifiantspour obtenir lesinformations de labase de donnéesen utilisantget_posts
:<?php $gallery = get_post_gallery( get_the_ID(), false ); $args = array( 'post_type' => 'attachment', 'posts_per_page' => -1, 'post_status' => 'any', 'post__in' => explode( ',', $gallery['ids'] ) ); $attachments = get_posts( $args ); foreach ( $attachments as $attachment ) { $image_alt = get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true); if ( empty( $image_alt )) { $image_alt = $attachment->post_title; } if ( empty( $image_alt )) { $image_alt = $attachment->post_excerpt; } $image_title = $attachment->post_title; $image_url = wp_get_attachment_image_src( $attachment->ID, 'full' ); echo '<div class="one-third columns gallery-item">'; echo '<div class="item-picture" data-type="image">'; echo '<img src="' . $image_url[0] . '" alt="'. $image_alt .'">' ; echo '<div class="image-overlay">'; echo '<a href="' . $image_url[0] . '" data-rel="prettyPhoto[gallery]"> <span class="zoom"></span></a>'; echo '</div>'; echo '<span class="item-label">' . $image_title . '</span>'; echo '</div>'; echo '</div>'; } ?>
Le script recherche lesinformations debalise alt dans
_wp_attachment_image_alt
,post_title
etpost_excerpt
jusqu'à ce qu'iltrouve une valeur.A little background: WP stores the attachments in the same database table as posts. Therefore the table rows correspond to the fields of the media edit modal:
get_post_gallery_images
will return you URLs to the images, but not the actual data in the database. You could do a reverse-query and look for posts that contain the image URL but that would be more difficult than necessary.Instead use the get_post_gallery function. This one is actually used by
get_post_gallery_images
too, but also returns the IDs of the attachments in an array. Use these IDs to get the information from the database usingget_posts
:<?php $gallery = get_post_gallery( get_the_ID(), false ); $args = array( 'post_type' => 'attachment', 'posts_per_page' => -1, 'post_status' => 'any', 'post__in' => explode( ',', $gallery['ids'] ) ); $attachments = get_posts( $args ); foreach ( $attachments as $attachment ) { $image_alt = get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true); if ( empty( $image_alt )) { $image_alt = $attachment->post_title; } if ( empty( $image_alt )) { $image_alt = $attachment->post_excerpt; } $image_title = $attachment->post_title; $image_url = wp_get_attachment_image_src( $attachment->ID, 'full' ); echo '<div class="one-third columns gallery-item">'; echo '<div class="item-picture" data-type="image">'; echo '<img src="' . $image_url[0] . '" alt="'. $image_alt .'">' ; echo '<div class="image-overlay">'; echo '<a href="' . $image_url[0] . '" data-rel="prettyPhoto[gallery]"> <span class="zoom"></span></a>'; echo '</div>'; echo '<span class="item-label">' . $image_title . '</span>'; echo '</div>'; echo '</div>'; } ?>
The script looks for alt-tag info in
_wp_attachment_image_alt
,post_title
andpost_excerpt
until it finds a value.-
Salut Janmercibeaucouppour votre aideet vos détails supplémentaires.Ayanttoujours dumal à obtenir lesimages de lagalerie/post-méta,lapagene renvoie aucun résultat.Commentimage_url obtient-il l'url de l'image de lagalerie?J'aiessayé de régler `$image_url=post_guid;` sans succès.Lafonction d'explosionprend une chaîne (ID d'image)et latransformeen untableau utiliséparget_postset get_post_meta,oui?Jefais également référence au codexpour quelquesindices: [https://codex.wordpress.org/Function_Reference/get_post_gallery]et [https://codex.wordpress.org/Function_Reference/wp_get_attachment_image]Hi Jan thanks so much for your help and augmenting details. Still having trouble getting the gallery images/post-meta, the page returns no results. How does image_url obtain the url of the gallery image? I tried setting `$image_url = post_guid;` to no success. The explode function is taking a string (image IDs) and turning this into an array used by get_posts and get_post_meta, yes? I'm reference the codex too for some clues: [https://codex.wordpress.org/Function_Reference/get_post_gallery] and [https://codex.wordpress.org/Function_Reference/wp_get_attachment_image]
- 0
- 2015-04-26
- ccbar
-
Je suisfouet j'ai oublié d'inclureimage_url.Désolé.J'aimis àjour la réponse.Notez que `wp_get_attachment_image_src` renvoie untableau contenant l'url,la largeur,la hauteuret"boolean:true si $ urlest uneimage redimensionnée,false si c'est l'original ou si aucuneimagen'est disponible. "I'm a nut and actually forgot to include image_url. Sorry for that. I have updated the answer. Note that `wp_get_attachment_image_src` returns an array that contains the url, width, height and "boolean: true if $url is a resized image, false if it is the original or if no image is available."
- 0
- 2015-04-27
- Jan Beck
-
Salut Jan,résultats depagetoujours vides.J'ai égalementessayé d'ajouter denouvellesimages à unenouvellegaleriepour voir sij'avaisbesoin detélécharger denouvellesimages,et non desimagesexistantes dans labibliothèquemultimédia,afin de voir sije pouvais obtenir des résultats,maisnon.Vous apprenez donctoujoursphpmais `$image_url [0]` signifiemettre ànulljusqu'à ce que l'ID soitpassé?la seule chose qui afonctionné demanièrefiableest d'obtenir le shortcodepour lagalerie comme dansmapremière question,je nepeuxtout simplementpas obtenir letitre sacré.Hi Jan, still empty page results. I also tried adding new images to a new gallery to see if I needed to upload new images, not existing images within media library, in order to see if I could get any results, but no. So still learning php but `$image_url[0]` means to set to null until the ID is passed? the only thing that's worked reliably is getting the shortcode for gallery as in my first question, just can't get the darn title.
- 0
- 2015-04-27
- ccbar
-
Alors,le comptage doit-il commencer àpartir de 0,puis-je avoir uneparenthèse vide []et avoirencore desidentifiants d'images?`$image_url [0]` vs `$image_url []`So does the counting have to start from 0, can I have an empty bracket[] and still have image IDs passed though it? `$image_url[0]` vs `$image_url[]`
- 0
- 2015-04-27
- ccbar
-
Je vais l'essayerplustard,en attendant,jetez un œil à la documentation https://codex.wordpress.org/Function_Reference/wp_get_attachment_image_srcI'll try it later, meanwhile have a look at the documentation https://codex.wordpress.org/Function_Reference/wp_get_attachment_image_src
- 0
- 2015-04-27
- Jan Beck
-
Terrifiant!merci,je comprendsenfin.[0] spécifie lepremierindex dutableau,l'ID.enprivé,je pourrais vousenvoyer un lien vers lapage detest,si celafait une différence.Terrific! thank you, I finally get it. [0] specifics the first index of the array, the ID. privately I could send you a link to the test page, if that makes any difference.
- 0
- 2015-04-28
- ccbar
-
Je suis content que vous l'aillez compris.[0]esten effet lepremierindex dutableau qui contient l'URL directe de l'image.J'aiexécuté le code dansmonenvironnement de développementet j'ai remarqué queget_post_gallery abesoin d'un deuxièmeparamètre défini sur `false`,sinonilne retournerapas untableaumais un html de lagalerie.J'aimodifié la réponse originalepour refléter cela.Glad you figured it out. [0] is indeed the first index of the array that contains the direct URL to the image. I ran the code in my dev environment and notices that get_post_gallery needs a second parameter set to `false` otherwise it will not return an array but html of the gallery. I edited the original answer to reflect that.
- 0
- 2015-04-28
- Jan Beck
-
Yay!Çamarche!Je vous remercie.- le code ci-dessusn'estpasencoremodifié,pour une raison quelconque.Mais dès que ce sera le cas,je vérifierai que la réponseest correcte.Yay! it works! Thank you. -- the code above isn't yet edited, for some reason. But as soon as it is, I'll check the answer as correct.
- 0
- 2015-04-28
- ccbar
-
devrait être changémaintenant.Heureux depouvoir vous aider.should be changed now. Glad I could help you out.
- 0
- 2015-04-29
- Jan Beck
-
Très appréciée!Puis-je lepartager?Greatly appreciated! May I share it?
- 0
- 2015-04-29
- ccbar
-
Partagez quoi?La réponse quej'ai donnée?Share what? The answer I gave?
- 0
- 2015-04-29
- Jan Beck
-
N'hésitezpas àen faire ce que vous voulez :)Feel free to do whatever you want with it :)
- 0
- 2015-05-05
- Jan Beck
-
Oui,répondez-vous,tellementnécessaireet utile.Je vous remercie.Yes, you answer, so much needed and helpful. Thank you.
- 0
- 2015-05-21
- ccbar
J'essaie d'apprendre à coderphp afin depouvoirpersonnaliser lagalerie d'images dans WordPress (entre autrespersonnalisations).
Le code quej'aifonctionnetrèsbien pour unepage degalerie stylisée,maisj'ai dumal àtrouver comment obtenir letitreet les attributs alt desimages dans lagalerie WP (je suppose c'estparce que lesimagesne sontpas vues comme despiècesjointes à l'articlepuisqu'elles sont dans lafonctiongalerie).
Etj'aimerais utiliser lagalerie WP,carje souhaite utiliser cettefonctionnalitéintégrée de WPpour lesgaleries.
toute aideest appréciée ...est-ce lamanière laplus stupide defaire quelque chose ou quoi?
Remarque: get_attachment ouget_children a également été désastreux lorsque vousessayez demodifier desimages sur unepage lorsque vousn'utilisez PAS lagalerie WP dans ces anciennespiècesjointes ou lesenfants qui ont été supprimés de lapage apparaissenttoujours) .