Подсчет постов, возвращаемых 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. Надеюсь, это понятно.
Aram Boyajyan
Грязное решение - выполнить запрос дважды, с параметром numberposts установленным в -1, и посчитать эти результаты. Но это ужасно с точки зрения производительности, и я сомневаюсь, что это правильное решение.
Aram Boyajyan
Попробую. Стоит ли снова использовать $wp_query->found_posts для получения общего количества результатов?
Aram Boyajyan
вам следует использовать что-то другое вместо $wp_query, например $my_query = new WP_Query($args);, а затем $my_query->found_posts, и не забудьте использовать wp_reset_postdata() в конце, если вы изменяете глобальный объект $post.
birgire