Как получить сообщения по нескольким идентификаторам?

21

У меня есть строка с постом идентификаторов: 43,23,65.
Я надеялся, что смогу использовать get_posts()и использовать строку с идентификаторами в качестве аргумента.

Но я не могу найти какие-либо функции для получения нескольких сообщений по идентификатору.

Я действительно должен сделать WP_query?

Я также видел, как кто-то упоминал об использовании tag_in- но я не могу найти никакой документации по этому вопросу.

Стивен
источник
Вы пытались использовать аргумент get_posts() include для codex.wordpress.org/Template_Tags/get_posts ?
Майкл

Ответы:

37

Вы можете использовать, так get_posts()как он принимает те же аргументы, что и WP_Query.

Чтобы передать ему идентификаторы, используйте 'post__in' => array(43,23,65)(принимает только массивы).

Что-то типа:

$args = array(
    'post__in' => array(43,23,65)
);

$posts = get_posts($args);

foreach ($posts as $p) :
    //post!
endforeach;

Я также установил post_typeи posts_per_pageпросто для хорошей меры.

CookiesForDevo
источник
Это не работает
Разъяренная ярость
Нет? Вы передаете это как массив? Используя два подчеркивания (post__in против post_in)? Передача post_type?
CookiesForDevo
1
Если вы получаете пользовательский тип записи, используйте post_typeаргумент, и если вам нужно более 5 результатов, добавьте эту 'nopaging' => trueопцию. Если у вас есть строка с разделителями-запятыми вместо массива, используйте explode(',',$input);для преобразования в массив.
ejazz
1
Если вы хотите сохранить порядок сообщений так, как они передаются array, добавьте их 'order_by' => 'post__in'в свой $args.
rob_st
Остерегайтесь использования post_typeпараметра. В случае post, функция будет возвращать ВСЕ типы контента, включая ваши пользовательские, а не только post.
Fusion
3

Если вы не можете заставить работать вышеперечисленное, обязательно добавьте post_type:

$args = array(
    'post_type' => 'pt_case_study',
    'post__in' => array(2417, 2112, 784)
);

$posts = get_posts($args);
virtualLast
источник