Вопрос или проблема
Когда я использую этот код на странице моего плагина, я получаю пустой массив, а не требуемый результат.
Что не так с этим кодом?
$defaults_arr = array(
'post_type' => 'at-subscription',
'suppress_filters' => true,
'order' => 'ASC',);
//
$query_r = wp_parse_args($args,$defaults_arr);
$get_posts = new WP_Query();
print_r($get_posts->query($query_r));
Вы можете написать так
$args = array(
'posts_per_page' => 10, // -1 для получения всех постов
'orderby' => 'date',
'order' => 'DESC',
'post_type' => 'at-subscription', // тип поста
'post_status' => 'publish',
'suppress_filters' => true
);
$posts_array = get_posts( $args );
// Для отображения всех постов, связанных с at-subscription
print_r( $posts_array );
Надеюсь, это вам поможет.
Спасибо
Ответ или решение
Когда вы пытаетесь использовать класс WP_Query
для получения кастомных типов записей в WordPress, и получаете пустой результат, как в вашем случае, важно проверить несколько моментов. Рассмотрим предоставленный вами код и проанализируем основные проблемы.
Проблемы в вашем коде
-
Инициализация WP_Query:
В вашем коде$get_posts = new WP_Query();
вы создаете новый экземплярWP_Query
, но не передаёте аргументы запроса. Это приводит к тому, что он будет создан с пустыми параметрами. -
Передача аргументов:
Ваша переменная$query_r
не передаётся вWP_Query
. Вам необходимо инициализироватьWP_Query
, передавая туда ваш массив с параметрами. -
Неправильное использование метода:
Вызов$get_posts->query($query_r)
пытается выполнить запрос, но это не является стандартным использованием классаWP_Query
. Лучше всего инициализировать запрос при создании экземпляра класса.
Исправленный код
Вот как можно правильно использовать WP_Query
для выборки кастомных типов записей:
$args = array(
'post_type' => 'at-subscription', // указываем нужный тип записи
'posts_per_page' => 10, // -1 для получения всех записей
'orderby' => 'date',
'order' => 'ASC',
'post_status' => 'publish', // только опубликованные записи
'suppress_filters' => true // отключаем фильтры
);
$query = new WP_Query($args); // передаём массив с параметрами при инициализации
if ($query->have_posts()) {
while ($query->have_posts()) {
$query->the_post();
// Здесь можно выводить необходимые данные о постах
echo '<h2>' . get_the_title() . '</h2>';
}
wp_reset_postdata(); // сбрасываем данные поста
} else {
echo 'Записи не найдены.';
}
Важные моменты
-
Параметры запроса: Убедитесь, что вы укладываетесь в правильные параметры, такие как
post_type
иpost_status
. Если ваш настраиваемый тип записи не имеет опубликованных записей, то результат будет пустым. -
Проверка наличия записей: Перед попыткой получения данных осуществляйте проверку на наличие постов с помощью метода
have_posts()
. -
Сброс данных поста: В конце запроса используйте
wp_reset_postdata()
, чтобы восстановить глобальную переменную$post
. -
Использование
get_posts
: Способ, описанный вами, с использованиемget_posts()
также корректен. ОднакоWP_Query
предоставляет большую гибкость и функциональность, особенно для более сложных запросов.
При следовании данным рекомендациям, вы сможете успешно получать записи нужного типа в ваших плагинах или темах WordPress. Не забудьте также проверить наличие записей в администраторской панели и убедиться, что записи с типом at-subscription
действительно существуют.