Obteniendo el título de la imagen / atributo alt del shortcode de la galería
1 respuesta
- votos
-
- 2015-04-26
Unpoco de historia: WP almacena los archivos adjuntosen lamismatabla debase de datos que laspublicaciones. Por lotanto,lasfilas de latabla corresponden a los campos delmodal deedición demedios:
get_post_gallery_images
le devolverá las URL a lasimágenes,perono los datos realesen labase de datos. Puede hacer una consultainversa y buscarpublicaciones que contengan la URL de laimagen peroeso seríamás difícil de lonecesario.En su lugar,utilice lafunción get_post_gallery . Estetambiénes utilizadopor
get_post_gallery_images
,perotambién devuelve los ID de los archivos adjuntosen unamatriz. Utiliceestos IDpara obtener lainformación de labase de datosmedianteget_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>'; } ?>
El scriptbuscainformación deetiqueta alternativaen
_wp_attachment_image_alt
,post_title
ypost_excerpt
hasta queencuentra un valor.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.-
Hola Jan,muchasgraciasportu ayuda y los detalles adicionales.Aúnteniendoproblemaspara obtener lasimágenes de lagalería/post-meta,lapáginano arroja resultados.¿Cómo obtieneimage_url la URL de laimagen de lagalería?Intenté configurar `$image_url=post_guid;` sin éxito.Lafunción deexplosióntoma una cadena (ID deimagen) y la convierteen unamatriz utilizadaporget_posts yget_post_meta,¿no?También hago referencia al códicepara obtener algunaspistas: [https://codex.wordpress.org/Function_Reference/get_post_gallery] y [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
-
Soy un loco y de hechome olvidé deincluirimage_url.Lo sientoporeso.He actualizado la respuesta.Tengaen cuenta que `wp_get_attachment_image_src` devuelve unamatriz que contiene la URL,el ancho,la altura y"booleano: verdadero si $ urles unaimagen redimensionada,falso siesel original o sino hayimagen 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
-
Hola Jan,los resultados de lapágina aúnestán vacíos.Tambiénintenté agregarnuevasimágenes a unanuevagaleríapara ver sinecesitaba cargarnuevasimágenes,noimágenesexistentes dentro de labiblioteca demedios,para ver sipodía obtener algún resultado,perono.Entonces,¿sigues aprendiendophppero `$image_url [0]` significaestableceren nulo hasta que sepase la ID?lo único que hafuncionado demanera confiablees obtenerel código cortopara lagalería comoen miprimerapregunta,simplementenopuedo obtenerelmalditotítulo.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
-
Entonces,¿el conteotiene que comenzar desde 0,puedotener un corchete vacío [] y aúnteneridentificaciones deimagenpasadas através de él?`$image_url [0]`frente a `$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
-
Lointentarémástarde,mientrastanto,eche un vistazo a la documentación 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
-
¡Estupendo!gracias,finalmente loentiendo.[0]especificaelprimer índice de lamatriz,el ID.enprivado,podríaenviarle unenlace a lapágina deprueba,sieso hace alguna diferencia.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
-
Me alegro de que lo hayas descubierto.[0]es de hechoelprimer índice de lamatriz que contiene la URL directa a laimagen.Ejecutéel códigoen mientorno de desarrollo yme di cuenta de queget_post_gallerynecesita un segundoparámetroestablecidoen `false`; de lo contrario,no devolverá unamatriz sino html de lagalería.Edité la respuesta originalpara reflejareso.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
-
¡Hurra!¡funciona!Gracias.-el código anterior aúnno se haeditado,por alguna razón.Perotanpronto como lo sea,comprobaré que la respuestaes correcta.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
-
debería cambiarse ahora.Me alegro depoder ayudarte.should be changed now. Glad I could help you out.
- 0
- 2015-04-29
- Jan Beck
-
¡Apreciadoenormemente!¿Puedo compartirlo?Greatly appreciated! May I share it?
- 0
- 2015-04-29
- ccbar
-
¿Compartir que?¿La respuesta que di?Share what? The answer I gave?
- 0
- 2015-04-29
- Jan Beck
-
Siéntete libre de hacer lo que quieras con él :)Feel free to do whatever you want with it :)
- 0
- 2015-05-05
- Jan Beck
-
Sí,respondes,tannecesario y útil.Gracias.Yes, you answer, so much needed and helpful. Thank you.
- 0
- 2015-05-21
- ccbar
Estoytratando de aprender a codificarphpparapoderpersonalizar lagalería deimágenes dentro de WordPress (entre otraspersonalizaciones).
El código quetengofuncionamuybien para unapágina degaleríaestilizada,perotengo dificultadesparatratar de averiguar cómo obtenereltítulo y los atributos alt de lasimágenes dentro de lagalería de WP (supongoesporque lasimágenesno se ven como archivos adjuntos a lapublicación,ya queestánen lafunción degalería).
Yme gustaría usar lagalería WP,ya que quiero usaresafuncionalidadincorporada de WPparagalerías.
Se agradece cualquier ayuda ... ¿esesta laformamástonta de hacer algo o qué?
Nota: get_attachment oget_childrentambién ha sido desastroso alintentareditarimágenesen unapágina cuando NO se usa lagalería WPen la quetodavía aparecen archivos adjuntos antiguos oniños que se haneliminado de lapágina) .