Como fazer com que WP_Query 'post__in' aceite um array?

3

Eu tenho uma função que retorna uma lista separada por vírgula de IDs de postagem que um determinado usuário pode acessar. Eu quero usar essa lista em um loop WP_Query.

A função personalizada:

$array = user_albums();
foreach( $array as $post ) {
    if( !in_array( $post->ID, $array ) )
        $ids[] = $post->ID;
}
$access_ids = implode( ', ', $ids );

Então, aqui está a situação:

  1. No meu site de teste, a lista de IDs é 158, 162, 145, 269 .
  2. Inserir a lista de IDs retorna apenas a primeira postagem. 'post__in'=> array( $access_ids ),
  3. Inserir a lista de IDs não em uma matriz retorna um erro. 'post__in'=> $access_ids ,
  4. Inserir os IDs de postagem manualmente retorna correto posts 'post__in'=> array( 158, 162, 145, 269 ),

O que eu poderia estar fazendo de errado?
Agradeço qualquer ajuda.

    
por torinagrippa 06.02.2012 / 20:23

3 respostas

4

$access_ids é uma string. post__in aceita uma matriz.

Então, em vez de $ access_ids, você pode usar 'post__in'=> $ids pulando $access_ids = implode( ', ', $ids ); todos juntos.

    
por Rob Vermeer 06.02.2012 / 20:37
5

Esse implode() é provavelmente o que quebra as coisas:

$access_ids = '158, 162, 145, 269';

$array = array($access_ids); //wrong
var_dump( $array ); 
// array
//  0 => string '158, 162, 145, 269' (length=18)

$array = array_map( 'trim', explode( ',', $access_ids ) ); // right
var_dump( $array ); 
//array
//  0 => string '158' (length=3)
//  1 => string '162' (length=3)
//  2 => string '145' (length=3)
//  3 => string '269' (length=3)
    
por Rarst 06.02.2012 / 20:38
1

Basta definir 'post__in'=>$ids , declarando que array ($ access_ids) não cria o array desejado.

    
por Stephen Harris 06.02.2012 / 20:39

Tags