Как использовать get_posts для фильтрации по одному идентификатору поста?

Вопрос или проблема

Как мне использовать get_posts для фильтрации по одному id записи? (Я не хочу использовать get_post, потому что использую это в другой функции, которая может принимать другие параметры и должна возвращать массив). Следующие методы не работают:

get_posts(array(
    'ID' => 12345,
));

get_posts(array(
    'p' => 12345,
));

get_posts(array(
    'post' => 12345,
));

get_posts(array(
    'post__in' => array(12345),
));

Неважно, все эти методы работают, если я добавлю параметр post_type в запрос:

get_posts(array(
    'ID' => 12345,
    'post_type' => array('any'),
));

get_posts(array(
    'p' => 12345,
    'post_type' => array('any'),
));

get_posts(array(
    'post' => 12345,
    'post_type' => array('any'),
));

get_posts(array(
    'post__in' => array(12345),
    'post_type' => array('any'),
));

Это действительно глупое дизайнерское решение; любой тип записи должен подразумеваться, если параметр опущен.

Ответ или решение

Чтобы использовать функцию get_posts для фильтрации по конкретному идентификатору поста, важно учитывать, что для корректной работы необходимо указать параметр post_type. Это может показаться неудобным, но, к сожалению, такое требование обусловлено дизайном WordPress. Вот как можно корректно использовать get_posts с фильтрацией по ID поста:

  1. Фильтрация по ID с использованием параметров: Чтобы получить пост по его ID, вы можете использовать любой из следующих методов, добавляя параметр post_type для уточнения типа поста. Например, если вы хотите получить пост с ID 12345:
$posts = get_posts(array(
    'ID' => 12345,
    'post_type' => array('any'), // Замените 'any' на нужный вам тип поста, если это необходимо
));

Или используя другие способы, записанные ниже:

$posts = get_posts(array(
    'p' => 12345,
    'post_type' => array('any'),
));

$posts = get_posts(array(
    'post' => 12345,
    'post_type' => array('any'),
));

$posts = get_posts(array(
    'post__in' => array(12345),
    'post_type' => array('any'),
));
  1. Уточнение типа поста: Вместо использования 'any', вы можете заменить его на конкретный тип поста, например, 'post', 'page' или любой другой пользовательский тип поста, который вы используете в своем проекте.

  2. Исключение ошибок: Если вы не укажете post_type, запрос может не вернуть ожидаемый результат. Это может вызвать путаницу, особенно если идентификатор поста верный, но он не соответствует типу поста, который запрашивается.

Таким образом, чтобы успешно использовать get_posts для получения данных по определенному посту, всегда включайте параметр post_type, чтобы избежать неожиданных результатов. Это не только помогает избежать ошибок, но и облегчает дальнейшую работу с полученными данными.

Оцените материал
Добавить комментарий

Капча загружается...