Как получить все URL изображений, прикрепленных к записи?

1 мар. 2015 г., 22:57:25
Просмотры: 14.8K
Голосов: 3

Я искал везде, но никак не могу найти решение.

Я пытаюсь вывести XML-фид со всеми изображениями, прикрепленными к записи из пользовательского типа записи:

</BasicDetails>
<Pictures>
 <Picture>
  <PictureUrl><?php echo wp_get_attachment_url( get_post_thumbnail_id($post->ID)); ?></PictureUrl>
 <Caption></Caption>
 </Picture><Picture>
 <PictureUrl></PictureUrl>
 <Caption></Caption>
</Picture>
</Pictures>

Я использую wp_get_attachment_url, но он возвращает только одно изображение (а их больше одного для каждой записи)

<?php echo wp_get_attachment_url( get_post_thumbnail_id($post->ID)); ?>

Элемент <Picture> повторяющийся, поэтому для каждого нового изображения должен начинаться новый блок.

Любая помощь будет очень ценной!

2
Комментарии

Так вам нужны все изображения для одного поста в пользовательском типе записи или все изображения для всех постов пользовательского типа записи?

Jason Murray Jason Murray
1 мар. 2015 г. 22:59:45

Все URL изображений из поста. Лента выводит все записи пользовательского типа записи.

Marco Marco
1 мар. 2015 г. 23:15:42
Все ответы на вопрос 2
11

Вам нужно пройтись по вложениям внутри цикла записи, замените указанный участок кода на этот (собран из другого найденного мной кода, связанного с похожей проблемой, но не был протестирован):

</BasicDetails>
<?php  $args = array(
            'post_parent'    => $post->ID, // Родительский пост
            'post_type'      => 'attachment', // Тип поста - вложение
            'numberposts'    => -1, // показать все
            'post_status'    => 'any', // Любой статус
            'post_mime_type' => 'image', // Только изображения
            'orderby'        => 'menu_order', // Сортировка по порядку меню
            'order'           => 'ASC' // По возрастанию
       );

$images = get_posts($args);
if($images) { ?>
<Pictures>
  <?php foreach($images as $image) { ?>
   <Picture>
    <PictureUrl><?php echo wp_get_attachment_url($image->ID); ?></PictureUrl> // URL изображения
     <Caption><?php echo $image->post_excerpt; ?></Caption> // Подпись изображения
  </Picture>
  <?php } ?>
</Pictures>
<?php } ?>
<Agent>

РЕДАКТИРОВАНО - Обновлено на основе правок автора вопроса.

1 мар. 2015 г. 23:42:40
Комментарии

Сейчас проверю, последний тег открыт? и } необходим?

Marco Marco
1 мар. 2015 г. 23:48:05

@Marco предполагая, что после этого фрагмента кода сразу идет какой-то php код, последний тег должен быть открыт да, если вы выводите больше тегов, вы можете просто добавить ?> в конце. Так что это будет либо как опубликовано <?php }, либо <?php } ?>

Jason Murray Jason Murray
1 мар. 2015 г. 23:51:32

Понял, хотя я добавил указанное выше условие if( в function.php, и это вызвало падение моего сайта. Я должен был упомянуть, что использую коммерческую тему, которая сильно кастомизирована.

Marco Marco
2 мар. 2015 г. 00:00:32

@Marco, не мог бы ты обновить вопрос, добавив весь соответствующий раздел functions.php, а также любой фронтенд-код?

Jason Murray Jason Murray
2 мар. 2015 г. 00:04:05

Я обновил свой вопрос, добавив XML-файл, который я использую.

Marco Marco
2 мар. 2015 г. 00:24:09

@Marco, я обновил решение и добавил немного контекста в начало и конец блока кода. Дай мне знать, как у тебя дела. Если снова появится белый экран, можешь включить wp_debug в wp-config.php и проверить, какая ошибка выводится?

Jason Murray Jason Murray
2 мар. 2015 г. 00:42:14

попробую, как только мой сервер снова заработает (не по теме, но не используйте bluehost)

Marco Marco
2 мар. 2015 г. 00:56:11

Потрясающе!! Если бы вы были в Нью-Йорке, я бы купил вам пиво. У меня есть ещё одна проблема - post_per_page почему-то ограничивается 45. Когда я ставлю -1, получаю ошибку парсинга. Есть идеи?

Marco Marco
2 мар. 2015 г. 02:24:39

@Marco Хотел бы! Можешь попробовать добавить nopaging => true, в аргументы твоего запроса постов в начале.

Jason Murray Jason Murray
2 мар. 2015 г. 02:37:22

хаха, ну если вдруг — дай мне знать! nopaging, кажется, не сработал. Может, мне стоит создать новый вопрос.

Marco Marco
2 мар. 2015 г. 02:47:38

Давай продолжим обсуждение в чате.

Jason Murray Jason Murray
2 мар. 2015 г. 02:51:40
Показать остальные 6 комментариев
0

Используйте этот код внутри цикла записей.

$attimages = get_attached_media('image', $post->ID);
foreach ($attimages as $image) {
    echo wp_get_attachment_url($image->ID).'<br>';
}

Этот код вернет URL всех прикрепленных изображений

30 окт. 2019 г. 17:01:18