Получение атрибута title / alt изображения из шорткода галереи
1 ответ
- голосов
-
- 2015-04-26
Немного предыстории: WP хранит вложения в той же таблице базы данных,что и сообщения. Следовательно,строки таблицы соответствуют полям модального окна редактирования мультимедиа:
get_post_gallery_images
вернет вам URL-адреса изображений,но не фактические данные в базе данных. Вы можете выполнить обратный запрос и найти сообщения,содержащие URL-адрес изображения но это будет сложнее,чем необходимо.Вместо этого используйте функцию get_post_gallery . Он также используется
get_post_gallery_images
,но также возвращает идентификаторы вложений в массиве. Используйте эти идентификаторы для получения информации из базы данных с помощьюget_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>'; } ?>
Сценарий ищет информацию о alt-тегах в
_wp_attachment_image_alt
,post_title
иpost_excerpt
,пока не найдет значение.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.-
Привет,Ян,большое спасибо за вашу помощь и дополнительные детали.По-прежнему возникают проблемы с получением изображений галереи/пост-мета,страница не возвращает результатов.Какimage_url получает URL-адрес изображения галереи?Я попытался установить $image_url=post_guid; безуспешно.Функцияexplode берет строку (идентификаторы изображений) и превращает ее в массив,используемыйget_posts иget_post_meta,да?Я также ссылаюсь на кодекс для некоторых подсказок: [https://codex.wordpress.org/Function_Reference/get_post_gallery] и [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
-
Я чокнутый и вообще забыл включитьimage_url.Простите за это.Я обновил ответ.Обратите внимание,что `wp_get_attachment_image_src` возвращает массив,содержащий URL-адрес,ширину,высоту и« логическое значение:true,если $ url - изображение с измененным размером,false,если оно является оригиналом или если изображение недоступно ».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
-
Привет,Ян,все еще пустая страница.Я также попытался добавить новые изображения в новую галерею,чтобы увидеть,нужно ли мне загружать новые изображения,а не существующие изображения в медиатеке,чтобы увидеть,могу ли я получить какие-либо результаты,но нет.Итак,вы все еще изучаетеphp,но `$image_url [0]` означает значениеnull,пока не будет передан идентификатор?единственное,что работало надежно,- это получение шорткода для галереи,как в моем первом вопросе,просто не могу получить чертовски название.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
-
Итак,должен ли подсчет начинаться с 0,могу ли я иметь пустую скобку [] и при этом передавать идентификаторы изображений?`$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
-
Попробую позже,а пока взгляну на документацию 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
-
Потрясающе!спасибо,наконец-то я понял.[0] определяет первый индекс массива,ID.в частном порядке я мог бы отправить вам ссылку на тестовую страницу,если это имеет значение.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
-
Рад,что ты это понял.[0] действительно является первым индексом массива,содержащего прямой URL-адрес изображения.Я запустил код в своей среде разработки и заметил,чтоget_post_gallery нуждается во втором параметре,установленном на `false`,иначе он вернет не массив,а html галереи.Я отредактировал исходный ответ,чтобы отразить это.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! 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
-
нужно изменить сейчас.Рад,что смог вам помочь.should be changed now. Glad I could help you out.
- 0
- 2015-04-29
- Jan Beck
-
Высоко оценен!Могу я поделиться?Greatly appreciated! May I share it?
- 0
- 2015-04-29
- ccbar
-
Поделитесь чем?Ответ,который я дал?Share what? The answer I gave?
- 0
- 2015-04-29
- Jan Beck
-
Не стесняйтесь делать с ним все,что хотите :)Feel free to do whatever you want with it :)
- 0
- 2015-05-05
- Jan Beck
-
Да,отвечаете вы,так нужно и полезно.Спасибо.Yes, you answer, so much needed and helpful. Thank you.
- 0
- 2015-05-21
- ccbar
Я пытаюсь научиться программироватьphp,чтобы я мог настроить галерею изображений в WordPress (среди других настроек).
Код,который у меня есть,отлично подходит для стилизованной страницы галереи, но мне трудно понять,как получить атрибутыtitle и alt изображений в галерее WP (я предполагаю это потому,что изображения не отображаются как вложения к сообщению,поскольку они находятся в функции галереи).
И я хотел бы использовать галерею WP,так как хочу использовать встроенные функции WP для галерей.
Любая помощь приветствуется ... это самый тупой способ что-то сделать или что?
Примечание. get_attachment илиget_children также были катастрофическими при попытке редактировать изображения на странице,когда НЕ использовали галерею WP в этих старых вложениях или дочерние элементы,которые были удалены со страницы,все еще отображаются) .