Cum să obții toate URL-urile imaginilor atașate la un post în WordPress

1 mar. 2015, 22:57:25
Vizualizări: 14.8K
Voturi: 3

Am căutat peste tot și nu reușesc să găsesc soluția.

Încerc să generez un feed XML cu toate imaginile atașate la un post dintr-un tip de postare personalizat:

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

Folosesc wp_get_attachment_url dar returnează doar o singură imagine (Există mai multe imagini pe post)

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

Elementul <Picture> este un element repetitiv, așa că ar trebui să înceapă un nou arbore când există o altă imagine atașată.

Orice ajutor ar fi minunat!

2
Comentarii

Deci vrei toate imaginile pentru un singur articol dintr-un tip de postare personalizată, sau toate imaginile pentru toate articolele dintr-un tip de postare personalizată?

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

Toate URL-urile imaginilor dintr-un articol. Fluxul afișează toate articolele dintr-un tip de postare personalizată.

Marco Marco
1 mar. 2015 23:15:42
Toate răspunsurile la întrebare 2
11

Trebuie să parcurgi atașamentele din bucla ta de postare, înlocuiește secțiunea de cod pe care ai postat-o cu aceasta (am compilat-o din alt cod pe care l-am găsit legat de o problemă similară, dar nu am putut să o testez):

</BasicDetails>
<?php  $args = array(
            'post_parent'    => $post->ID,
            'post_type'      => 'attachment',
            'numberposts'    => -1, // afișează toate
            '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>

EDIT - Actualizat pe baza modificărilor solicitate.

1 mar. 2015 23:42:40
Comentarii

O să testez acum, este ultimul tag deschis? și } necesar?

Marco Marco
1 mar. 2015 23:48:05

@Marco presupunând că un fel de cod php urmează imediat după această bucată de cod, ultimul tag ar trebui să fie deschis da, dacă mai afișezi alte tag-uri poți pune pur și simplu un ?> la sfârșit. Deci va fi fie așa cum a fost postat <?php } sau <?php } ?>

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

Am înțeles, deși am adăugat condiția if( de mai sus în functions.php și mi-a crăpat site-ul. Ar fi trebuit să menționez că foloseam o temă comercială care este puternic personalizată.

Marco Marco
2 mar. 2015 00:00:32

@Marco poți actualiza întrebarea cu întreaga secțiune din functions.php legată de aceasta și orice cod din partea de front-end.

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

Am actualizat întrebarea mea cu fișierul XML pe care îl folosesc.

Marco Marco
2 mar. 2015 00:24:09

@Marco am actualizat soluția și am adăugat un pic de context la începutul și sfârșitul blocului de cod, spune-mi cum merge. Dacă ecranul devine din nou alb, poți activa wp_debug în wp-config.php și să verifici ce eroare apare?

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

o voi încerca imediat ce serverul meu revine online (Fără legătură, dar nu folosiți Bluehost)

Marco Marco
2 mar. 2015 00:56:11

Minunat!! Dacă ai fi în NYC, ți-aș cumpăra o bere. Mai am o problemă, post_per_page din nu știu ce motiv se limitează la 45. Când pun -1 primesc o eroare de parsare. Ai vreo idee?

Marco Marco
2 mar. 2015 02:24:39

@Marco Aș vrea! Puteți încerca să adăugați nopaging => true, la argumentele interogării de postări, sus în cod.

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

haha, ei bine, dacă se întâmplă, dă-mi de veste! nopaging nu pare să funcționeze. Poate ar trebui să deschid o nouă întrebare.

Marco Marco
2 mar. 2015 02:47:38

continuăm discuția în chat.

Jason Murray Jason Murray
2 mar. 2015 02:51:40
Arată celelalte 6 comentarii
0

folosește acest cod în bucla de postare.

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

acest cod va returna toate URL-urile imaginilor atașate

30 oct. 2019 17:01:18