Используйте WP_Query для пользовательского типа записи, но результат получается пустым.

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

Когда я использую этот код на странице моего плагина, я получаю пустой массив, а не требуемый результат.

Что не так с этим кодом?

$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, и получаете пустой результат, как в вашем случае, важно проверить несколько моментов. Рассмотрим предоставленный вами код и проанализируем основные проблемы.

Проблемы в вашем коде

  1. Инициализация WP_Query:
    В вашем коде $get_posts = new WP_Query(); вы создаете новый экземпляр WP_Query, но не передаёте аргументы запроса. Это приводит к тому, что он будет создан с пустыми параметрами.

  2. Передача аргументов:
    Ваша переменная $query_r не передаётся в WP_Query. Вам необходимо инициализировать WP_Query, передавая туда ваш массив с параметрами.

  3. Неправильное использование метода:
    Вызов $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 действительно существуют.

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

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