不管是写WordPress主题还是插件,大部分时候都要用到 WP_Query这个查询类。我个人比较喜欢用WordPress原生的查询,而不是自己去写SQL语句。不过在文章数量很多的情况下,我们需要对 WP_Query的参数比较了解才能尽可能的提高查询效率。今天说一个案例,客户要求是批量修改分类下的全部文章的一个自定义字段,我觉得不算困难,就只收了200,结果发现某个分类下,有一万多篇文章。。。果然,代码写好以后,查询别的分类都没事,查询这个分类就会报错。由于是用的AJAX,只能看到返回500错误,没看到具体错误信息。不过估计是内存溢出错误。
本来打算改用SQL语句进行查询,想想还是先去看看文档吧,然后就在官方文档看见了这个 fields
参数。因为我只需要获取文章ID,不需要其他的,所以,添加 fields
就OK了。而且查询速度也快了很多。示例代码如下:
public static function getPostCount($term_id)
{
$args = array(
'post_type' => 'post',
'post_status' => 'publish',
'cat' => $term_id,
'posts_per_page' => -1,//获取全部文章
'fields' => 'ids'//仅返回文章ID数组
);
$the_query = new WP_Query( $args );
return ( $the_query->have_posts() ) ? $the_query->found_posts : 0;
}