Abrufen des Attributs Bildtitel / Alt aus dem Galerie-Shortcode
1 Antworten
- Stimmen
-
- 2015-04-26
Ein kleiner Hintergrund: WP speichert die Anhängein derselben Datenbanktabelle wie Beiträge. Daherentsprechen die Tabellenzeilen den Feldern des Medienbearbeitungsmodals:
get_post_gallery_images
gibt Ihnen URLs zu den Bildern zurück,jedochnicht dietatsächlichen Datenin der Datenbank. Sie könneneine umgekehrte Abfrage durchführen und nach Posts suchen,die die Bild-URLaber das wäre schwieriger alsnötig. Verwenden Sie stattdessen die Funktion get_post_gallery . Dieser wirdtatsächlich auch von
aus der Datenbank abzurufenget_post_gallery_images
verwendet,gibt aber auch die IDs der Anhängein einem Array zurück. Verwenden Sie diese IDs,um die Informationenmithilfe vonget_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>'; } ?>
Das Skript suchtin
_wp_attachment_image_alt
,post_title
undpost_excerpt
nach Alt-Tag-Informationen,biseseinen Wertfindet.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.-
Hallo Jan,vielen Dankfür deine Hilfe und die Erweiterung der Details.Die Seite hatimmernoch Problemebeim Abrufen der Galeriebilder/Post-Meta undgibt keine Ergebnisse zurück.Wieerhältimage_url die URL des Galeriebildes?Ich habe versucht,"$image_url=post_guid;" auf keinen Erfolg zu setzen.Die Explosionsfunktion verwendeteine Zeichenfolge (Bild-IDs) und wandelt diesein ein Array um,das vonget_posts undget_post_meta verwendet wird. Ja?Ich verweise auch auf den Codexfüreinige Hinweise: [https://codex.wordpress.org/Function_Reference/get_post_gallery] und [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
-
Ichbin eine Nuss und habetatsächlich vergessen,image_urleinzuschließen.Dastutmir leid.Ich habe die Antwort aktualisiert.Beachten Sie,dass `wp_get_attachment_image_src`ein Array zurückgibt,das die URL,Breite,Höhe und"boolean:true "enthält,wenn $ urlein Bildmit geänderter Größeist,false,wennes das Originalist oder wenn kein Bild verfügbarist.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
-
Hallo Jan,noch leere Seitenergebnisse.Ich habe auch versucht,einerneuen Galerieneue Bilder hinzuzufügen,um zu sehen,obichneue Bilder hochladenmuss,nicht vorhandene Bilderin der Medienbibliothek,um zu sehen,obich Ergebnisseerzielen kann,abernein.Alsoimmernoch PHP lernen,aber `$image_url [0]`bedeutet,aufnull zu setzen,bis die ID übergeben wird?Daseinzige,was zuverlässigfunktioniert hat,ist,den Shortcodefür die Galerie zubekommen,wiein meinerersten Frage,ich kanneinfachnicht den verdammten Titelbekommen.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
-
Muss die Zählung alsobei 0beginnen,kannicheine leere Klammer [] haben undtrotzdem Bild-IDs übergeben?$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
-
Ich werdees später versuchen,währenddessen schauen Sie sich die Dokumentation https://codex.wordpress.org/Function_Reference/wp_get_attachment_image_src anI'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
-
Umwerfend!Danke,ich versteheesendlich.[0]gibt denersten Index des Arrays an,die ID.Privat könnteich Ihneneinen Link zur Testseite schicken,wenn daseinen Unterschiedmacht.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
-
Ichbin froh,dass dues herausgefunden hast.[0]istin der Tat dererste Index des Arrays,der die direkte URL zum Bildenthält.Ich habe den Codein meiner Entwicklungsumgebung ausgeführt undfestgestellt,dassget_post_galleryeinen zweiten Parametersatzbenötigt,der auf "false"gesetztist. Andernfalls wird kein Array,sondern HTML der Galerie zurückgegeben.Ich habe die ursprüngliche Antwortbearbeitet,um dies widerzuspiegeln.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!Es klappt!Vielen Dank.- Der obige Code wurde ausirgendeinem Grundnochnichtbearbeitet.Aber sobaldes soweitist,werdeich die Antwort als richtig überprüfen.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
-
solltejetztgeändert werden.Ichbin froh,dassich dir helfen konnte.should be changed now. Glad I could help you out.
- 0
- 2015-04-29
- Jan Beck
-
Sehrgeschätzt!Darfichesteilen?Greatly appreciated! May I share it?
- 0
- 2015-04-29
- ccbar
-
Was Teilen?Die Antwort,dieichgegeben habe?Share what? The answer I gave?
- 0
- 2015-04-29
- Jan Beck
-
Fühlen Sie sichfrei,damit zumachen,was Sie wollen :)Feel free to do whatever you want with it :)
- 0
- 2015-05-05
- Jan Beck
-
Ja,Sie antworten,so dringendbenötigt und hilfreich.Vielen Dank.Yes, you answer, so much needed and helpful. Thank you.
- 0
- 2015-05-21
- ccbar
Ich versuche zu lernen,wieman PHP codiert,damitich die Bildergaleriein WordPress (unter anderem) anpassen kann.
Der Code,denich habe,eignet sich hervorragendfüreine stilisierte Galerieseite, aberesfälltmir schwer,herauszufinden,wieich die Titel- und Alt-Attribute der Bilderin der WP-Galerieerhalte (ich vermute Dies liegt daran,dass die Bildernicht als Anhänge zum Beitrag angesehen werden,da sie sichin der Galeriefunktionbefinden.
Undichmöchte die WP-Galerie verwenden,daich diesein WPintegrierte Funktionalitätfür Galerien verwendenmöchte.
Jede Hilfe wirdgeschätzt ...ist dies die dümmste Art,etwas zutun,oder was?
Hinweis: get_attachment oderget_children warenebenfalls katastrophal,wenn versucht wurde,Bilder aufeiner Seite zubearbeiten,wenn die WP-Galerie NICHTin den alten Anhängen oder untergeordneten Elementen verwendet wurde,die von der Seiteentfernt wurden. .