¿Cómo hacer que WP_Query 'post__in' acepte un array?

6 feb 2012, 21:23:32
Vistas: 47.6K
Votos: 8

Tengo una función que devuelve una lista de IDs de posts separados por comas a los que un usuario particular puede acceder. Quiero usar esta lista en un bucle WP_Query.

La función personalizada:

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

Aquí está la situación:

  1. En mi sitio de prueba la lista de IDs es 158, 162, 145, 269.
  2. Insertar la lista de IDs solo devuelve el primer post. 'post__in'=> array( $access_ids ),
  3. Insertar la lista de IDs sin un array devuelve un error. 'post__in'=> $access_ids ,
  4. Insertar los IDs de posts manualmente devuelve los posts correctos 'post__in'=> array( 158, 162, 145, 269 ),

¿Qué podría estar haciendo mal?
Agradezco cualquier ayuda.

1
Comentarios

¡Gracias chicos por la ayuda! El array implode era efectivamente el causante del problema.

MTT MTT
6 feb 2012 22:34:41
Todas las respuestas a la pregunta 3
1
11

$access_ids es una cadena. post__in acepta un arreglo.

Así que en lugar de $access_ids podrías usar 'post__in'=> $ids omitiendo completamente el $access_ids = implode( ', ', $ids );.

6 feb 2012 21:37:44
Comentarios

para mí esto tampoco funciona, ¿puedes ayudarme por favor?

Niket Joshi Niket Joshi
2 ene 2019 12:37:47
0

Ese implode() probablemente es lo que está rompiendo las cosas:

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

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

$array = array_map( 'trim', explode( ',', $access_ids ) ); // correcto
var_dump( $array ); 
//array
//  0 => string '158' (length=3)
//  1 => string '162' (length=3)
//  2 => string '145' (length=3)
//  3 => string '269' (length=3)
6 feb 2012 21:38:07
0

Simplemente establece 'post__in'=>$ids, declarar array( $access_ids ) no crea el arreglo deseado.

6 feb 2012 21:39:16