¿Cómo obtener todas las URLs de imágenes adjuntas a una publicación?

1 mar 2015, 22:57:25
Vistas: 14.8K
Votos: 3

He buscado por todas partes y no logro encontrarlo.

Estoy intentando generar un feed XML con todas las imágenes adjuntas a una publicación de un tipo de contenido personalizado:

</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>

Estoy usando wp_get_attachment_url pero solo devuelve una imagen (Hay más de una por publicación)

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

El elemento <Picture> se repite, por lo que debería comenzar un nuevo árbol cuando haya otra imagen adjunta.

¡Cualquier ayuda sería increíble!

2
Comentarios

¿Entonces quieres todas las imágenes para un solo post en un tipo de post personalizado, o todas las imágenes para todos los posts de un tipo de post personalizado?

Jason Murray Jason Murray
1 mar 2015 22:59:45

Todas las URLs de las imágenes de un post. El feed está mostrando todos los posts de un tipo de post personalizado.

Marco Marco
1 mar 2015 23:15:42
Todas las respuestas a la pregunta 2
11

Necesitas recorrer los archivos adjuntos dentro de tu bucle de publicaciones, reemplaza la sección de código que publicaste con esto (armado a partir de otro código que encontré relacionado con un problema similar, pero no pude probarlo):

</BasicDetails>
<?php  $args = array(
            'post_parent'    => $post->ID,
            'post_type'      => 'attachment',
            'numberposts'    => -1, // mostrar todos
            '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>
     <Caption><?php echo $image->post_excerpt; ?></Caption>
  </Picture>
  <?php } ?>
</Pictures>
<?php } ?>
<Agent>

EDITADO - Actualizado según las ediciones del que pregunta.

1 mar 2015 23:42:40
Comentarios

Lo probaré ahora, ¿está la última etiqueta abierta? y ¿es necesario el }?

Marco Marco
1 mar 2015 23:48:05

@Marco asumiendo que algún tipo de código php sigue inmediatamente después de este fragmento de código, la última etiqueta debería estar abierta sí, si estás mostrando más etiquetas puedes simplemente agregar un ?> al final. Así que será tal como se publicó <?php } o <?php } ?>

Jason Murray Jason Murray
1 mar 2015 23:51:32

Entendido, aunque agregué la declaración if( anterior en function.php y colapsó mi sitio. Debí mencionar que estaba usando un tema comercial que está altamente personalizado.

Marco Marco
2 mar 2015 00:00:32

@Marco ¿puedes actualizar la pregunta con toda la sección de functions.php relacionada con esto y cualquier código de front end?

Jason Murray Jason Murray
2 mar 2015 00:04:05

Actualicé mi pregunta con el archivo XML que estoy usando.

Marco Marco
2 mar 2015 00:24:09

@Marco He actualizado la solución y he proporcionado un poco de contexto al principio y al final del bloque de código, avísame cómo te va. Si vuelve a aparecer la pantalla en blanco, ¿puedes activar wp_debug en wp-config.php y verificar qué error está mostrando?

Jason Murray Jason Murray
2 mar 2015 00:42:14

Lo probaré tan pronto como mi servidor vuelva a estar en línea (Sin relación, pero no uses bluehost)

Marco Marco
2 mar 2015 00:56:11

¡¡Maravilloso!! Si estuvieras en NYC te invitaría una cerveza. Tengo un problema más, el post_per_page por alguna extraña razón se limita a 45. Cuando pongo -1 me da un error de análisis. ¿Alguna idea?

Marco Marco
2 mar 2015 02:24:39

@Marco ¡Ojalá! Bueno, podrías intentar agregar nopaging => true, a los argumentos de tu consulta de posts cerca de la parte superior.

Jason Murray Jason Murray
2 mar 2015 02:37:22

jaja, bueno, si alguna vez lo haces ¡avísame! nopaging no pareció funcionar. Tal vez debería abrir una nueva pregunta.

Marco Marco
2 mar 2015 02:47:38

Continuemos esta discusión en el chat.

Jason Murray Jason Murray
2 mar 2015 02:51:40
Mostrar los 6 comentarios restantes
0

usa este código en el bucle de publicaciones.

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

este código devolverá todas las URLs de imágenes adjuntas

30 oct 2019 17:01:18