Подсчет постов, возвращаемых get_posts во внешнем PHP скрипте
Я использую WordPress из внешнего PHP скрипта, подключая файл wp-load.php
.
Все функции и всё остальное работает как ожидается, кроме одного: я не могу заставить работать $wp_query->found_posts
после того, как получаю посты с помощью функции get_posts()
.
Есть ли какие-нибудь подсказки, что я должен использовать вместо этого?
Спасибо!
Функция 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

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

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

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

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