Copyright © 2020-2026
卯光宇 All Rights Reserved


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就会是一个包含所有阅读数的数组了。


读后有收获欢迎打赏站长喝瓶元气森林😹


点赞    

扫一扫,点右上角⋯分享




   
   
    给站长留言    
😀😂😅😆😊😍😝🤭🌹🤝😵😭😱😳😣😴
昵称*
验证*:6-3 =