Как заставить WP_Query 'post__in' принимать массив?

6 февр. 2012 г., 21:23:32
Просмотры: 47.6K
Голосов: 8

У меня есть функция, которая возвращает список ID постов через запятую, к которым у определенного пользователя есть доступ. Я хочу использовать этот список в цикле WP_Query.

Пользовательская функция:

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

Вот ситуация:

  1. На моем тестовом сайте список ID выглядит так: 158, 162, 145, 269.
  2. Вставка списка ID возвращает только первый пост. 'post__in'=> array( $access_ids ),
  3. Вставка списка ID не в массиве возвращает ошибку. 'post__in'=> $access_ids ,
  4. Ручная вставка ID постов возвращает правильные посты 'post__in'=> array( 158, 162, 145, 269 ),

Что я делаю не так?
Буду благодарен за любую помощь.

1
Комментарии

Спасибо, ребята, за вклад! Массив implode действительно вызывал проблему.

MTT MTT
6 февр. 2012 г. 22:34:41
Все ответы на вопрос 3
1
11

$access_ids — это строка. post__in принимает массив.

Поэтому вместо $access_ids можно использовать 'post__in' => $ids, полностью пропуская $access_ids = implode( ', ', $ids );.

6 февр. 2012 г. 21:37:44
Комментарии

для меня это тоже не работает, не могли бы вы помочь?

Niket Joshi Niket Joshi
2 янв. 2019 г. 12:37:47
0

Вероятно, implode() — это то, что ломает работу:

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

$array = array($access_ids); //неправильно
var_dump( $array ); 
// массив
//  0 => строка '158, 162, 145, 269' (длина=18)

$array = array_map( 'trim', explode( ',', $access_ids ) ); // правильно
var_dump( $array ); 
//массив
//  0 => строка '158' (длина=3)
//  1 => строка '162' (длина=3)
//  2 => строка '145' (длина=3)
//  3 => строка '269' (длина=3)
6 февр. 2012 г. 21:38:07
0

Просто установите 'post__in'=>$ids, объявление array( $access_ids ) не создает нужный массив.

6 февр. 2012 г. 21:39:16