WordPress统计全站阅读数
WordPress有一些好用的“count”函数可以进行全站统计,例如,要统计全站发布的博文数,可以用wp_count_posts()。但是,要统计自定义的量,研究了一下,貌似没有类似的函数可用。关心这个问题,是因为我想统计全站已发布的类型为post和page的文档的阅读数,而阅读数这个量,在原生WordPress里是没有的,只能自定义记录。
我建立了一个键名为views的meta,用它来记录每一篇文档的阅读数,我的目标是得到所有文档的views的键值之和,即全站文档的阅读数。最容易想到的方法是先取出所有的文档,然后遍历它们的views把键值进行加总,实现的代码如下:
$args = array(
'post_status' => 'publish',
'numberposts' => '-1', //取消文档数限制
'meta_key' => 'views',
'post_type' => array('post','page')
);
$posts_temp = get_posts($args);
$totalviews = 0;
foreach ($posts_temp as $post) {
$totalviews += (int)get_post_meta($post->ID,"views",true);
}
echo $totalviews;
上面做法的最大问题是时间成本。由于取出的每篇文档(对象)都包含了大量与阅读数无关的信息,一旦文档数量多或文档内容量大,取数据的时间消耗就不能忽视。所以,上面并不是一个好的解决方案。
为了规避无关信息,降低时间成本,直接从WordPress的数据表中取数据是更好的做法。其实,所需要的数据无非就是postmeta表中键名为views的那一列数而已。为了直接从数据表中取到需要的数据,可以利用WordPress提供的全局对象$wpdb,它是专门用来操作数据表的工具。下面是通过操作数据表获取数据的解决方案:
global $wpdb;
$totalviews = $wpdb->get_var($wpdb->prepare("
SELECT sum(pm.meta_value)
FROM {$wpdb->postmeta} pm
INNER JOIN {$wpdb->posts} p ON pm.post_id = p.ID
WHERE pm.meta_key = %s
AND p.post_status = %s
AND (p.post_type = %s OR p.post_type = %s)",
'views','publish','post', 'page'));
echo $totalviews;
在上面的代码中,求和直接由第三行的sum()函数解决了。如果只想取出所有的阅读数,可以把第二行的get_var改为get_col,并把第三行的sum()去掉,这样,$totalviews就会是一个包含所有阅读数的数组了。
- 版权声明:本作品使用知识共享(Creative Commons)的署名-非商业性使用-禁止演绎 4.0 国际许可协议。非商业转载请注明出处(作者及原文链接),商业转载请联系作者获得授权。


给站长留言