Ottenere l'attributo titolo / alt dell'immagine dallo shortcode della galleria
1 risposta
- voti
-
- 2015-04-26
Unpo 'dibackground: WPmemorizzagli allegatinella stessatabella del database deipost. Pertanto le righe dellatabella corrispondono ai campi delmodale dimodifica deimedia:
get_post_gallery_images
ti restituiràgli URL alleimmagini,manoni datieffettivinel database. Potrestieseguire una queryinversae cercarei post che contengono l'URL dell'immagine ma sarebbepiù difficile delnecessario.Utilizzainvece lafunzione get_post_gallery . Questo èeffettivamente utilizzato anche da
get_post_gallery_images
,ma restituisce anchegli ID degli allegatiin un array. Utilizza questi IDper ottenere leinformazioni dal database utilizzandoget_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>'; } ?>
Lo script cerca leinformazioni sultag altin
_wp_attachment_image_alt
,post_title
epost_excerpt
finchénontrova un valore.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.-
Ciao Jan,graziemilleperiltuo aiutoe per aumentarei dettagli.Continuando a riscontrareprobleminell'ottenere leimmagini dellagalleria/post-meta,lapaginanon restituisce risultati.In chemodoimage_url ottiene l'URL dell'immagine dellagalleria?Hoprovato aimpostare "$image_url=post_guid;" senza successo.Lafunzione diesplosioneprende una stringa (IDimmagine)e latrasformain un array usato daget_postse get_post_meta,sì?Faccio riferimento anche al codiceper alcuniindizi: [https://codex.wordpress.org/Function_Reference/get_post_gallery]e [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
-
Sono unpazzoe in realtà ho dimenticato diincludereimage_url.Scusaper quella cosa.Ho aggiornato la risposta.Nota che `wp_get_attachment_image_src` restituisce un array che contiene l'url,la larghezza,l'altezzae"boolean:true se $ url è un'immagine ridimensionata,false se è l'originale o senessunaimmagine è disponibile. "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
-
Ciao Jan,risultati dipagina ancora vuoti.Ho ancheprovato ad aggiungerenuoveimmagini a unanuovagalleriaper vedere se avevobisogno di caricarenuoveimmagini,nonimmaginiesistentinella libreriamultimediale,per vedere sepotevo ottenere risultati,mano.Quindi sto ancoraimparandophpma `$image_url [0]` significaimpostare anullfino a quando l'IDnon vienepassato?l'unica cosa che hafunzionatoin modo affidabile è ottenere lo shortcodeper lagalleria comenellamiaprima domanda,semplicementenon riesco a ottenereiltitolomaledetto.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
-
Quindiil conteggio deveiniziare da 0,posso avere unaparentesi vuota []e avere ancora IDimmaginepassati?`$ URL_immagine [0]` vs `$ URL_immagine []`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
-
Loproveròpiùtardi,nelfrattempo dai un'occhiata alla documentazione 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
-
Eccezionale!grazie,finalmente ho capito.[0] specificailprimoindice dell'array,l'ID.privatamentepotreiinviarti un link allapagina ditest,se questofa la differenza.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
-
Sono contento chetu l'abbia capito.[0] èinfattiilprimoindice dell'array che contiene l'URL diretto all'immagine.Hoeseguitoil codicenelmio ambiente di sviluppoe honotato cheget_post_gallerynecessita di un secondoparametroimpostato su `false` altrimentinon restituirà un arrayma l'html dellagalleria.Homodificato la risposta originaleper riflettere questo.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
-
Sìì!Funziona!Grazie.-il codice sopranon è ancora statomodificato,per qualchemotivo.Manon appena lo sarà,controllerò la risposta come corretta.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
-
dovrebbeessere cambiato ora.Sono contento di avertipotuto aiutare.should be changed now. Glad I could help you out.
- 0
- 2015-04-29
- Jan Beck
-
Molto apprezzato!Posso condividerlo?Greatly appreciated! May I share it?
- 0
- 2015-04-29
- ccbar
-
Condividi cosa?La risposta che ho dato?Share what? The answer I gave?
- 0
- 2015-04-29
- Jan Beck
-
Sentiti libero difare quello che vuoi conesso :)Feel free to do whatever you want with it :)
- 0
- 2015-05-05
- Jan Beck
-
Sì,rispondi,tantonecessariae disponibile.Grazie.Yes, you answer, so much needed and helpful. Thank you.
- 0
- 2015-05-21
- ccbar
Sto cercando diimparare a codificarephpin modo dapoterpersonalizzare lagalleria diimmagini all'interno di WordPress (tra le altrepersonalizzazioni).
Il codice che hofunziona allagrandeper unapagina dellagalleria stilizzata,ma ho difficoltà a capire come ottenereiltitoloe gli attributi alt delleimmagini all'interno dellagalleria WP (immagino èperché leimmagininon vengono viste come allegati alpostpoiché sononellafunzionegalleria).
E vorrei utilizzare lagalleria WP,poiché desidero utilizzare lafunzionalitàincorporata di WPper legallerie.
qualsiasi aiuto è apprezzato ... è questoilmodopiù stupido difare qualcosa o cosa?
Nota: get_attachment oget_children è stato disastroso anche quando sitentava dimodificare leimmagini su unapagina quando NON si utilizzava lagalleria WPin quei vecchi allegati oi bambini che sono stati rimossi dallapagina vengono ancora visualizzati .