Неустранимая ошибка: необработанная ошибка: вызов функции-члена have_posts () в массиве - PullRequest
2 голосов
/ 12 марта 2019

Я развиваюсь в WordPress, и у меня есть ошибка.Я создаю файл шаблона с этой строкой, чтобы отобразить все объявления типа «Flash»

<?php

         $sql = "
    SELECT distinct p.* 
    FROM $wpdb->posts p, ".$wpdb->prefix."p2p pp
    WHERE p.ID = pp.p2p_to
    AND exists (select meta_id from ".$wpdb->prefix."p2pmeta m where m.p2p_id = pp.p2p_id and m.meta_key='type' and m.meta_value like '%flash%')
    AND exists (select meta_value from $wpdb->postmeta g where g.post_id = p.ID and g.meta_key='cp_sys_expire_date' and g.meta_value >= now())
    AND p.post_status = 'publish' 
    AND p.post_type = 'ad_listing'
    ORDER BY p.post_date DESC";

                 $flash_ads = $wpdb->get_results($sql, OBJECT);
                 $result = '';

?>

<div id="primary" class="content-area row">

    <div class="columns">

        <?php get_template_part( 'parts/breadcrumbs', app_template_base() ); ?>

    </div>

    <main id="main" class="site-main small-12 columns" role="main">

            <?php if ( $flash_ads->have_posts() ) : ?> 

            <div class="row entry-wrap small-up-1 medium-up-2 large-up-3">

                <?php while ( $flash_ads->have_posts() ): $flash_ads->the_post();  ?>

                <div class="column">

                <?php get_template_part( 'parts/content-item', APP_POST_TYPE ); ?>

                </div> <!-- .column -->

              <?php endwhile; ?>

            </div> <!-- .row --> 

            <?php cp_do_pagination(); ?>

        <?php else : ?>

            <?php appthemes_loop_else( get_post_type() ); ?>

            <?php get_template_part( 'parts/content-none', get_post_type() ); ?>

        <?php endif; ?> 

        <?php appthemes_after_loop( get_post_type() ); ?>

Я не знаю, где мои ошибки ... Большое спасибо за вашу помощь.Cyberm

1 Ответ

0 голосов
/ 13 марта 2019

Вы не используете 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 не установлена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...