Как получить записи по нескольким 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?

Если вы получаете пользовательский тип записи, используйте аргумент post_type
, а если вам нужно больше 5 результатов, добавьте опцию 'nopaging' => true
.
Если у вас строка, разделённая запятыми, а не массив, используйте explode(',',$input);
для преобразования в массив.

Если вы хотите сохранить порядок записей таким, каким он передан в array
, убедитесь, что добавили 'order_by' => 'post__in'
в ваш $args
.

Будьте осторожны с параметром post_type
. В случае значения post
функция вернет ВСЕ типы контента, включая ваши пользовательские, а не только записи типа post
.

Если вам нужно получить записи по их 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);
