我有一个相当广泛的数据库,30000多个项目,并使用此数据库:
$args = array(
\'posts_per_page\' => -1,
\'post_type\' => \'books\',
\'s\' => $s
);
$post_counts = count(get_posts($args));
似乎要花很长时间。
I solved this particular case with:
$post_count = $wpdb->get_var("SELECT COUNT(*) FROM $wpdb->posts WHERE post_type = \'books\' AND post_status = \'publish\' AND post_title LIKE \'%".$s."%\'");
但我有很多查询,我想计算一下,而不必手写。是否有任何方法可以使用wordpress本机函数对带有$args的帖子进行计数,而不必存储整个查询,而只存储计数?
最合适的回答,由SO网友:Howdy_McGee 整理而成
你可以做一件事。创建WP\\U查询对象,但仅包括ID:
$args = array(
\'posts_per_page\' => -1,
\'post_type\' => \'books\',
\'s\' => $s,
\'fields\' => \'ids\',
);
$query = new WP_Query( $args );
$post_counts = $query->post_count;
wp_reset_postdata();
通过使用
fields => ids
您只返回ID。此外,WP\\u Query已经进行了计数,并将其作为属性提供:
post_count
. 最后,由于我们使用的是WP\\u查询,因此需要使用
wp_reset_postdata()
.
SO网友:birgire
什么时候WP_Query
使用生成SQL查询SQL_CALC_FOUND_ROWS
和aLIMIT
条款:
SELECT SQL_CALC_FOUND_ROWS ... FROM ... WHERE ... LIMIT ...
然后是总行数:
SELECT FOUND_ROWS();
可从
found_posts
的属性
WP_Query
.
这意味着我们可以通过以下方式获取单个帖子:
\'posts_per_page\' => 1 // not -1
并从中获取总计数
$total = $query->found_posts;
在哪里
$query
是
WP_Query
对象
来自MySQLdocumentation:
FOUND\\u ROWS():
对于带有LIMIT子句的SELECT,如果没有LIMIT子句,将返回的行数
它还可以提供信息WP_Query::set_found_posts()
看看found_posts
构建属性。