Я пытаюсь получить галерею изображений и информацию о сообщении через цикл. Все, что я получаю источники изображений, но не подписи. Вот мой код
<?php
/* The loop */
while ( have_posts() ) :
the_post();
if ( get_post_gallery() ) :
$gallery = get_post_gallery( get_the_ID(), false );
/* Loop through all the image and output them one by one */
foreach( $gallery['src'] AS $src ) {
?>
<img src="<?php echo $src; ?>" class="my-custom-class" alt="Gallery image" />
<?php
}
endif;
endwhile;
?>
Используя этот цикл, я получаю только источник изображений галереи в посте. Но я хочу также получить подписи к изображениям.
Нашел решение на wordpress.org:
Вставьте это в ваши functions.php:
function wp_get_attachment( $attachment_id ) {
$attachment = get_post( $attachment_id );
return array(
'alt' => get_post_meta( $attachment->ID, '_wp_attachment_image_alt', true ),
'caption' => $attachment->post_excerpt,
'description' => $attachment->post_content,
'href' => get_permalink( $attachment->ID ),
'src' => $attachment->guid,
'title' => $attachment->post_title
);
}
Затем вы можете просто ввести идентификатор и получить любую мета, что вам нужно, например:
attachment_meta = wp_get_attachment(your_attachment_id);
И затем либо перебирайте значения массива, либо просто ссылайтесь по имени ключа того, что вы хотите (т.е. заголовок, описание и т. Д.):
echo $attachment_meta['caption'];
Выше будет повторять заголовок изображения.
wp_prepare_attachment_for_js функция действительно хороша для такого рода вещей. Он возвращает тонну информации о вложениях, все, что нам когда-либо понадобится, я думаю.
Вот оригинальный код, замененный на тот, который делает подпись доступной. В этом случае я поместил заголовок в тег alt:
<?php
/* The loop */
while ( have_posts() ) :
the_post();
if ( get_post_gallery() ) :
$gallery = get_post_gallery( get_the_ID(), false );
/* create an array of IDs from */
$gids = explode( ",", $gallery['ids'] );
/* Loop through all the image and output them one by one */
foreach ($gids as $id) {
/* pull all the available attachment data with the new function */
$attachment = wp_prepare_attachment_for_js($id);
/* Uncomment the next line to see all the available data in $attachment */
//var_dump($attachment);
/* pick and choose which bits are needed */
?>
<img src="<?php echo $attachment['sizes']['thumbnail']['url']; ?>" class="my-custom-class" alt="<?php echo $attachment['caption']; ?>" />
<?php
}
endif;
endwhile;
?>
Стоит отметить, что эта функция также возвращает все доступные размеры изображений, поэтому она может быть полезна при использовании комбинации нестандартные размеры изображений а также srcset для адаптивных имиджевых решений 🙂
вместо того, чтобы передать get_the_ID, просто передайте весь пост $ и используйте код примерно так
$gallery = get_post_gallery( $post, false );
$gids = explode( ",", $gallery['ids'] );
foreach( $gids as $id ) {
// here you can use the $id to fetch any details of image like below and many more
wp_get_attachment_url( $id );
wp_get_attachment_metadata( $id );
}
Вы можете попробовать распечатать значение этих функций и использовать его в соответствии с вашими требованиями