Title: Loop de Attachments Random
Last modified: 6 agosto, 2016

---

# Loop de Attachments Random

 *  Resolvido [Everaldo Matias](https://br.wordpress.org/support/users/everaldomatias/)
 * (@everaldomatias)
 * [13 anos, 3 meses atrás](https://br.wordpress.org/support/topic/loopde-attachments-random/)
 * Olá pessoal.
    Estou com dúvidas/problemas em como fazer um _loop_ de attachments
   randomico.
 * Explicando:
    Cada post possui N imagens anexadas. Em uma página quero listar 
   todas essas imagens mas de forma ramdomica. Com o _rand_ como argumento ele mistura
   apenas os posts (e não os attachments).
 * Queria pegar todas as imagens de todos os posts desse _loop_ e então dar um _rand_.
 * Alguém tem alguma dica?
    Valew.

Visualizando 8 respostas - 1 até 8 (de um total de 8)

 *  [vmassuchetto](https://br.wordpress.org/support/users/vmassuchetto/)
 * (@vmassuchetto)
 * [13 anos, 3 meses atrás](https://br.wordpress.org/support/topic/loopde-attachments-random/#post-27695)
 * Aí Everaldo, aprenda bem a usar a [WP_Query](http://codex.wordpress.org/Class_Reference/WP_Query),
   é a sua melhor amiga na construção de loops.
 * Para 10 anexos aleatórios, tente algo assim:
 *     ```
       <?php
           $query = new WP_Query( array(
               'post_type' => 'attachment',
               'posts_per_page' => 10,
               'orderby' => 'rand'
           ) );
       ?>
   
       <?php if ( $query->have_posts() ) : ?>
   
           <?php while ( $query->have_posts() ) : $query->the_post(); ?>
   
               <?php
                   $img = wp_get_attachment_image_src( get_the_ID(), 'thumbnail', $size, $icon );
                   $link = wp_get_attachment_link( get_the_ID() );
               ?>
   
               <a href="<?php echo $link; ?>" title="<?php the_title(); ?>">
                   <img src="<?php echo $img['url']; ?>" alt="<?php the_title(); ?>" />
               </a>
   
           <?php endwhile; ?>
   
       <?php else : ?>
   
           <p>Nenhum anexo foi cadastrado.</p>
   
       <?php endif; ?>
       ```
   
 *  Criador do tópico [Everaldo Matias](https://br.wordpress.org/support/users/everaldomatias/)
 * (@everaldomatias)
 * [13 anos, 3 meses atrás](https://br.wordpress.org/support/topic/loopde-attachments-random/#post-27696)
 * Grande Vinícius. Obrigado a atenção. Meu código está assim:
 *     ```
       <?php $custom_query = new WP_Query( array ( 'orderby' => 'rand', 'cat' => '-1' ) ); // exclude category 1
       	while($custom_query->have_posts()) : $custom_query->the_post(); ?>
   
       	<?php
       	$args = array(
       		'post_type' => 'attachment',
       		'numberposts' => -1,
       		'post_status' => null,
       		'post_parent' => $post->ID,
       		'orderby' => 'rand',
       		);
   
       		$attachments = get_posts($args);
   
       	if ($attachments){
   
       		foreach ($attachments as $post) {
       			echo '<div class="box">';
       			setup_postdata($post);
   
       			$postURL = explode("attachment", get_permalink($post->ID));
       			$postImage = wp_get_attachment_image($post->ID, $size='thumbnail', $icon = false);
       		?>
       		<a href="<?php echo wp_get_attachment_url( $post->ID ); ?>" rel="lightbox" ><?php echo $postImage; ?></a>
       		</div>
       		<?php
       			}
       		}
       		?>
   
       <?php endwhile; ?>
       ```
   
 * Nisso ele imprime o seguinte:
 * post->1
    att->1,3,2; post->3 att->1,2,3,5,4; post->5 att->1,5,3,2,4; post->4 
   att->4,2,3,1,4; post->2 att->2,1,4,5,3;
 * O que eu quero, é pegar todos os _attachments_ de todos os _posts_ e então apresentar
   randomico, independente do _post_ que ele está.
 * Nesse código acima, ele está ramdonizando os _posts_ e os _attachments_. Mas 
   os _attachments_ do post->1 não estão se misturando com os _attachments_ dos 
   outros _posts_.
 * Valew pessoal.
 *  Criador do tópico [Everaldo Matias](https://br.wordpress.org/support/users/everaldomatias/)
 * (@everaldomatias)
 * [13 anos, 3 meses atrás](https://br.wordpress.org/support/topic/loopde-attachments-random/#post-27697)
 * Esse _loop_ abaixo, apresentado no codex da WP_Query como o Vinícius falou funciona
   e faz o _rand_ perfeitamente.
 *     ```
       <?php
                   $args = array( 'post_type' => 'attachment', 'numberposts' => -1, 'post_status' => 'any', 'post_parent' => null, 'orderby' => 'rand' );
                   $attachments = get_posts( $args );
                   if ($attachments) {
                       foreach ( $attachments as $post ) {
                           setup_postdata($post);
                           the_attachment_link($post->ID, false);
   
                       }
                   }
                   ?>
       ```
   
 * Porém ele imprime também os _attachments_ que estão “desanexados”, que não pertencem
   a nenhum _post_. Como posso fazer para ele mostrar apenas os _attachments_ que
   pertencem a algum post?
 *  Criador do tópico [Everaldo Matias](https://br.wordpress.org/support/users/everaldomatias/)
 * (@everaldomatias)
 * [13 anos, 3 meses atrás](https://br.wordpress.org/support/topic/loopde-attachments-random/#post-27699)
 * Pessoal, consegui.
 * Coloquei a seguinte verificação:
 * `<?php if ( $post->post_parent > 0 ) { ?>`
 * E então só exibe _attachments_ atrelados a algum _post_, o que muda o valor de
   _post\_parent_ para algo maior que 0.
 * Se falei bobagem, por favor me corrijam.
 *  [vmassuchetto](https://br.wordpress.org/support/users/vmassuchetto/)
 * (@vmassuchetto)
 * [13 anos, 3 meses atrás](https://br.wordpress.org/support/topic/loopde-attachments-random/#post-27700)
 * Tenta isso daqui, Everaldo. O exemplo anterior não estava testado e não funciona.
   Você precisa trocar `thumbnail` pelo tamanho da imagem que quer mostrar.
 *     ```
       <?php
           global $wpdb;
           $sql = "
               SELECT ID
               FROM {$wpdb->posts}
               WHERE 1=1
                   AND post_type = 'attachment'
                   AND post_parent != 0
                   AND post_mime_type LIKE 'image/%'
           ";
           foreach( $wpdb->get_results( $sql ) as $post ) {
               echo wp_get_attachment_link( $post->ID, 'thumbnail' );
           }
       ?>
       ```
   
 *  Criador do tópico [Everaldo Matias](https://br.wordpress.org/support/users/everaldomatias/)
 * (@everaldomatias)
 * [13 anos, 3 meses atrás](https://br.wordpress.org/support/topic/loopde-attachments-random/#post-27701)
 * Funcionou também Vinícius. Muito obrigado.
    O que eu postei alguns minutos antes
   de você funcionou perfeitamente. Mas está muito gambiarra com aquele if?
 * No seu, só faltou um RAND(), mas funcionou também.
 * Obrigado mais uma vez.
    Abraço.
 *  [vmassuchetto](https://br.wordpress.org/support/users/vmassuchetto/)
 * (@vmassuchetto)
 * [13 anos, 3 meses atrás](https://br.wordpress.org/support/topic/loopde-attachments-random/#post-27703)
 * Oi Everaldo. Este meu último exemplo é mais eficiente. Sai direto da consulta
   para a iteração sem nenhuma lógica adicional.
 *  Criador do tópico [Everaldo Matias](https://br.wordpress.org/support/users/everaldomatias/)
 * (@everaldomatias)
 * [13 anos, 3 meses atrás](https://br.wordpress.org/support/topic/loopde-attachments-random/#post-27704)
 * Perfeito.
    Muito obrigado pelo empenho.
 * Abraços.

Visualizando 8 respostas - 1 até 8 (de um total de 8)

O tópico ‘Loop de Attachments Random’ está fechado para novas respostas.

## Tags

 * [attachments](https://br.wordpress.org/support/topic-tag/attachments/)
 * [loop](https://br.wordpress.org/support/topic-tag/loop/)
 * [rand](https://br.wordpress.org/support/topic-tag/rand/)

 * Em: [Plugins](https://br.wordpress.org/support/forum/plugins-e-codigos/)
 * 8 respostas
 * 2 participantes
 * Última resposta de: [Everaldo Matias](https://br.wordpress.org/support/users/everaldomatias/)
 * Última atividade: [13 anos, 3 meses atrás](https://br.wordpress.org/support/topic/loopde-attachments-random/#post-27704)
 * Estado: resolvido

## Tópicos

### Tópicos mais populares

### Tópicos sem respostas

### Tópicos não relacionados a suporte

### Tópicos resolvidos

### Tópicos não resolvidos

### Todos os tópicos
