Подсчет постов, возвращаемых get_posts во внешнем PHP скрипте

11 мая 2013 г., 11:14:45
Просмотры: 36.8K
Голосов: 3

Я использую WordPress из внешнего PHP скрипта, подключая файл wp-load.php.

Все функции и всё остальное работает как ожидается, кроме одного: я не могу заставить работать $wp_query->found_posts после того, как получаю посты с помощью функции get_posts().

Есть ли какие-нибудь подсказки, что я должен использовать вместо этого?

Спасибо!

0
Все ответы на вопрос 1
6
10

Функция WordPress get_posts() создает собственный экземпляр WP_Query, который не является глобально доступным:

function get_posts($args = null) {
    // ... вырезано ...
    $get_posts = new WP_Query;
    return $get_posts->query($r);
}

Вместо этого вы можете использовать:

 $results = get_posts($args);
 echo count($results);

чтобы получить количество объектов постов, возвращаемых функцией get_posts().

Пример использования класса WP_Query():

Вы можете рассмотреть возможность непосредственного использования класса WP_Query().

Вот пример его применения:

<?php
// ваши входные параметры:   
$args = array(
    'posts_per_page' => 10,
);

$my_query = new WP_Query( $args );?>

Найдено постов: <?php echo $my_query->found_posts;?>

<?php if ( $my_query->have_posts() ):?>
    <ul>
        <?php while ( $my_query->have_posts() ) : $my_query->the_post(); ?>
            <li> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
        <?php endwhile; ?>
    </ul>
<?php endif; ?>

<?php wp_reset_postdata();?>    

В конце мы используем wp_reset_postdata(), чтобы восстановить глобальный объект $post, так как мы изменяем его через метод the_post().

Ссылки:

http://codex.wordpress.org/Function_Reference/wp_reset_postdata

http://codex.wordpress.org/Class_Reference/WP_Query

11 мая 2013 г. 12:31:30
Комментарии

Спасибо за ответ. Однако это не совсем сработает - get_posts() вернет количество элементов на странице, которое я укажу. Если всего 100 записей, а я получаю 10, то подсчет результатов таким образом все равно даст мне 10. Надеюсь, это понятно.

Aram Boyajyan Aram Boyajyan
13 мая 2013 г. 11:38:11

Грязное решение - выполнить запрос дважды, с параметром numberposts установленным в -1, и посчитать эти результаты. Но это ужасно с точки зрения производительности, и я сомневаюсь, что это правильное решение.

Aram Boyajyan Aram Boyajyan
13 мая 2013 г. 11:45:37

А как насчет использования WP_Query вместо get_posts?

birgire birgire
14 мая 2013 г. 15:24:14

Попробую. Стоит ли снова использовать $wp_query->found_posts для получения общего количества результатов?

Aram Boyajyan Aram Boyajyan
14 мая 2013 г. 22:12:53

вам следует использовать что-то другое вместо $wp_query, например $my_query = new WP_Query($args);, а затем $my_query->found_posts, и не забудьте использовать wp_reset_postdata() в конце, если вы изменяете глобальный объект $post.

birgire birgire
14 мая 2013 г. 23:38:03

Я обновил ответ.

birgire birgire
15 мая 2013 г. 00:13:55
Показать остальные 1 комментариев