Как получить записи по нескольким ID постов?
У меня есть строка с ID записей: 43,23,65.
Я надеялся, что смогу использовать get_posts() и передать строку с ID в качестве аргумента.
Но я не могу найти функции для получения нескольких записей по ID.
Неужели мне действительно нужно использовать WP_query?
Я также видел, что кто-то упоминал использование tag_in - но я не могу найти документацию по этому.
Вы можете использовать get_posts(), так как она принимает те же аргументы, что и WP_Query.
Для передачи ID используйте 'post__in' => array(43,23,65) (принимает только массивы).
Например, так:
$args = array(
'post__in' => array(43,23,65)
);
$posts = get_posts($args);
foreach ($posts as $p) :
//пост!
endforeach;
Я бы также рекомендовал установить параметры post_type и posts_per_page для надежности.
Нет? Вы передаёте его как массив? Используете два подчёркивания (post__in вместо post_in)? Указываете post_type?
CookiesForDevo
Если вы получаете пользовательский тип записи, используйте аргумент post_type, а если вам нужно больше 5 результатов, добавьте опцию 'nopaging' => true.
Если у вас строка, разделённая запятыми, а не массив, используйте explode(',',$input); для преобразования в массив.
ejazz
Если вы хотите сохранить порядок записей таким, каким он передан в array, убедитесь, что добавили 'order_by' => 'post__in' в ваш $args.
rob_st
Будьте осторожны с параметром post_type. В случае значения post функция вернет ВСЕ типы контента, включая ваши пользовательские, а не только записи типа post.
Fusion
Если вам нужно получить записи по их ID (независимо от типа записи), используйте следующий код:
$args = [
'post_type' => get_post_types(),
'post__in' => [ 43, 23, 65 ]
];
$posts = get_posts($args);
Или даже короче:
$args = [
'post_type' => 'any',
'post__in' => [ 43, 23, 65 ]
];
$posts = get_posts($args);