非大众版WordPress纯代码实现阅读量统计

1,014次阅读次阅读
14条评论

前言

因疫情影响,已经2个多月没有更新博客了,如果现在还不赶快出来冒个泡,怕大家误认为我走丢了(因为从来没有这么长时间断更过)。

目前我使用的Begin知更鸟主题,文章阅读次数统计是依赖于PostViews插件,大家都知道WordPress的诟病就是插件越多越慢(其实在我看来并不是插件越多越慢,而是查询、事件钩子越多就越慢),所以自己就写了一个纯代码版本,实现了阅读统计和部分查询函数。

当然,可能你想说这些早就有人分享过了;是的,在我写之前我肯定也会上网看看已存的,发现有几点不如意,例如添加meta的钩子是放在wp_head的、查询阅读数量必须要传递post_id等。 非大众版WordPress纯代码实现阅读量统计

正文

我直接贴出代码,每个函数的功能均在注释中已经标识出:

/**
 * 判断阅读数量是否需要增加并进行操作
 * 转载请注明来自:https://licoy.cn/3462.html
 */
function the_views_add($post_ID,$count,$key){
    if (is_single() || is_page()) {
        if ($count == '') {
            add_post_meta($post_ID, $key, '0');
        } else {
            update_post_meta($post_ID, $key, $count + 1);
            $count++;
        }
    }
    return $count;
}
//获取当前的阅读数量与自增
function the_views ($post_id=null,$echo=true) {
    global $post;
    if($post_id==null){
        $post_id = $post->ID;
    }
    $key = 'views';
    $count = get_post_meta($post_id, $key, true);
    if ($count == '') {
        $count = 0;
    }
    $count = the_views_add($post_id, $count, $key);
    $count = number_format_i18n($count);
    if(!$echo){
        return $count;
    }
    echo $count;
}
//设置文章发布的时候进行字段添加
function set_views ($post_ID) {
    $key = 'views';
    $count = get_post_meta($post_ID, $key, true);
    if ($count == '') {
        add_post_meta($post_ID, $key, '0');
    }
}
add_action('publish_post', 'set_views');

这里再分享一个查询函数,因为是自定义的所以就没有插件的附带函数支持,这个函数是查询N天内阅读数量最多的文章:

/**
 * 转载请注明来自:https://licoy.cn/3462.html
 * 获取查看最多的文章
 * @param $days N天内
 * @param $nums 数量
 * @return array|object|null
 */
function get_views_most_post($days, $nums){
    global $wpdb;
    $sql = "select posts.*, meta.meta_value as views
            from {$wpdb->posts} as posts INNER JOIN (select post_id,(meta_value+0) as meta_value from 
            {$wpdb->postmeta} where meta_key='views' order by (meta_value+0) DESC) as meta
            on meta.post_id = posts.ID
            where posts.post_type = 'post'
            AND posts.post_status = 'publish' AND TO_DAYS(now()) - TO_DAYS(posts.post_date) < {$days}
            ORDER BY meta.meta_value DESC limit 0, {$nums}";
    return $wpdb->get_results($sql);
}

后记

至于我为什么会分享这些代码出来,因为在过年期间博主写了一套WordPress主题,目前整体框架和内容都均已完成,现在处于优化和测试期,后续上线会专门发文告知,有兴趣的小伙伴欢迎多多关注,感谢你的支持! 非大众版WordPress纯代码实现阅读量统计

14
憧憬Licoy
版权声明:本站原创文章,由憧憬Licoy2020-03-11发表,共计2662字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(14条评论)
Loading...
八点半博客 评论达人LV.1
2020-10-01 14:47:29 回复

其实我就想知道一下,你的这代码高亮很漂亮,用的插件,还是主题集成 ?

八点半博客 评论达人LV.1
2020-10-01 14:46:49 回复

大白天看你的站,真是黑不溜秋的啊! 感觉有点不适应!

评论达人LV.1
2020-08-28 13:00:45 回复

学习了,评论做的不错

头条 评论达人LV.1
2020-04-13 23:52:37 回复

文章非常好超喜欢

麦杰自动包装机 评论达人LV.1
2020-04-11 10:53:52 回复

好文章,支持一下!!

辐射防护门 评论达人LV.1
2020-04-11 09:54:41 回复

学习了,受教受教

PacificRack 评论达人LV.1
2020-03-28 19:31:04 回复

期待新主题

热搜榜 评论达人LV.1
2020-03-21 01:13:17 回复

文章不错非常喜欢,支持

绿软吧(lvr8.com) 评论达人LV.1
2020-03-15 19:05:06 回复

感谢分享