Вы не используете WP_Query, но пользовательский запрос SQL:
$flash_ads = $wpdb->get_results($sql, OBJECT);
get_results
возвращает массив строк.Но позже в вашем коде вы делаете это:
<?php if ( $flash_ads->have_posts() ) : ?>
Итак, вы рассматриваете этот массив как экземпляр WP_Query ... И это проблема.
Итак, есть два способа это исправить:
1.Вместо этого используйте WP_Query
Вы можете использовать WP_Query вместо пользовательского запроса SQL.
$flash_ads = new WP_Query( array(
'post_type' => 'ad_listing',
'post_status' => 'publish',
...
) );
И затем вы можете использовать его так же, как в своем коде.
2.Измените ваш цикл
Или вы все равно можете использовать свой собственный запрос SQL (я бы не рекомендовал), но в этом случае вам придется перестроить свой цикл.
Это:
<?php if ( $flash_ads->have_posts() ) : ?>
должно стать так:
<?php if ( ! empty($flash_ads) ) : ?>
И это:
<?php while ( $flash_ads->have_posts() ): $flash_ads->the_post(); ?>
Должно стать так:
<?php foreach ( $flash_ads as $row ) : ?>
Но в таком случае вы можете '• не используйте теги шаблона для печати значений, поскольку глобальная $post
не установлена.