Obtendo o atributo de título / ALT da imagem da Shortcode da Galeria
1 responda
- votos
-
- 2015-04-26
Umpouco defundo: WP armazena os anexosnamesmatabela debanco de dados comoposts. Portanto,as linhas databela correspondem aos campos damídia Edit Modal:
get_post_gallery_images
Retornará URLspara asimagens,masnão os dados reaisnobanco de dados. Vocêpoderiafazer uma consulta reversae Procureposts que contenham o URL daimagem masisso seriamais difícil do que onecessário.Use o get_post_gallery função. Este é realmente usadopor
get_post_gallery_images
também,mastambém retorna os IDs dos anexosem umamatriz. Useesses IDspara obter asinformações dobanco de dados usandoget_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>'; } ?>
O scriptprocurainformações detag altem
_wp_attachment_image_alt
,post_title
epost_excerpt
atéencontrar um 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.-
Oi Jan Obrigadotantopela sua ajudae aumentando detalhes.Aindatendoproblemaspara obter asimagens dagaleria/post-meta,apáginanão retorna resultados.Comoimagem_url obtém o URL daimagem dagaleria?Eutentei definir `$image_url=post_guid;`paranenhum sucesso.Afunção Explodaestátirando uma string (IDs deimagem)e girandoissoem umamatriz usadaporget_postse get_post_meta,sim?Eu sou referência ao códicetambémpara algumaspistas: [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
-
Eu sou umaporcae realmenteesqueci deincluirimage_url.Desculpeporisso.Eu atualizei a resposta.Observe que "wp_get_attachment_image_src" retorna umamatriz que contém a URL,a largura,a alturae "booleana: True" Se $ URL é umaimagem redimensionada,falsa sefor o original ou senenhumaimagemestiver disponível. "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
-
Oi Jan,ainda os resultados dapágina vazia.Eutambémtentei adicionarnovasimagens a umanovagaleriapara ver seprecisavafazer upload denovasimagens,nãoexistentesimagens dentro dabiblioteca demídia,afim de ver seeupoderia obter quaisquer resultados,masnão.Então,ainda aprendendo PHP,mas `$image_url [0]` significa definirparanulo até que o ID sejapassado?A única coisa quefunciona deforma confiável é obter o shortcodepara agaleria comonaminhaprimeirapergunta,simplesmentenãopode obter otítulo Darn.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
-
Então a contagemtem que começar de 0,possoter um suporte vazio []e aindatenho IDs deimagempassadosembora?`$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
-
Voutentarmaistarde,enquantoisso dar uma olhadana documentação 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
-
Formidável!Obrigado,finalmenteentendi.[0] Especifica oprimeiro índice damatriz,o ID.Emparticular,eupoderiaenviar-lhe um linkpara apágina deteste,seissofaz alguma diferença.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
-
Ficofeliz que vocêtenhaentendido.[0] É defato oprimeiro índice damatriz que contém o URL diretopara aimagem.Eu corri o códigonomeu ambiente de desenvolvimentoe avisos queget_post_galleryprecisa de um segundoparâmetro definido como `false 'caso contrárioelenão retornará umamatriz,mas HTML dagaleria.Eueditei a resposta originalpara refletirisso.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!funciona!Obrigada.- O código acima aindanão éeditado,por algummotivo.Mas assim quefor,vou verificar a resposta como correta.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
-
deve ser alterado agora.Ficofeliz queeupoderiate ajudar.should be changed now. Glad I could help you out.
- 0
- 2015-04-29
- Jan Beck
-
Muito apreciado!Posso compartilhar?Greatly appreciated! May I share it?
- 0
- 2015-04-29
- ccbar
-
Compartilhe o que?A resposta queeu dei?Share what? The answer I gave?
- 0
- 2015-04-29
- Jan Beck
-
Sinta-se à vontadeparafazer o que quiser comele :)Feel free to do whatever you want with it :)
- 0
- 2015-05-05
- Jan Beck
-
Sim,você responde,tantonecessárioe útil.Obrigada.Yes, you answer, so much needed and helpful. Thank you.
- 0
- 2015-05-21
- ccbar
Euestoutentando aprender como codificar PHPpara queeupossapersonalizar agaleria deimagens dentro do WordPress (entre outraspersonalizações).
O código queeutenhofunciona ótimopara umapágina degaleriaestilizada,mastendo dificuldadeem tentar descobrir como obter os atributostítuloe alt dasimagens dentro dagaleria WP (euestou supondo Éporque asimagensnão são vistas como anexos aopost desde queestãonafunção Gallery).
Egostaria de usar a Galeria WP,como quero usaressafuncionalidadeintegrada WPparagalerias.
Qualquer ajuda é apreciada ... Essa é amaneiramaisidiota defazer algo ou o quê?
Nota: get_childment ouget_childrentambémfoi desastroso aotentareditarimagensem umapágina quandonãoestiver usando agaleria WPnesse antigas anexos oufilhos queforam removidos dapágina ainda aparecem) .