2014-09-22 3 views
4

Я пытаюсь захватить изображения галереи, и это информация о сообщении через цикл. Все я получаю источники изображений, но не подписи. Вот мой кодКак получить WP галереи Подписи к изображениям?

<?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; 
?> 

Используя этот цикл, я получаю только источник изображений галереи в сообщении. Но я хочу также захватить подписи к изображениям.

+0

В '$ gallery' содержатся другие поля, кроме 'src'? Не могли бы вы показать всю структуру '$ gallery'? – andy

ответ

6

Найдено решение on 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']; 

Вышеупомянутое будет отражать подпись изображения.

Кредит составляет Luke Mlsna и sporkme.

1

вместо прохождения 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); 
} 

Вы можете попробовать напечатать значение этих функций и использовать его в соответствии с вашими требованиями

+0

В моем тестировании это не возвращает подпись. Подпись прикрепления - это «выдержка», насколько я могу видеть, а не метаданные. –

2

Функция wp_prepare_attachment_for_js действительно хороша для такого рода вещей. Он возвращает TON информации об приложениях, все, что нам когда-либо понадобится, я думаю.

Оригинальный код с заменой заменен на тот, который делает подпись доступной. В этом случае я поставил подпись в альт тег:

<?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; 
?> 

Стоит отметить, что эта функция возвращает все доступные размеры изображений тоже, так что это может быть большим при использовании комбо custom image sizes и srcset для отзывчивым image solutions :)

Смежные вопросы