首页 >> PHP >> 内容页

wordpress网站如何添加文章阅读计数(非插件实现)

Wordpress程序做小网站很好用, 尤其是个人博客,拥有大量的主题和插件,就算不懂代码都能做出很漂亮的网站。
纯原生的Wordpress程序已经足够满足个人博客的使用,但有时可能由于某些使用习惯,或者需求,我们想计量每篇文章的阅读量。但这功能,Wordpress里面基础功能并没有包含。实现的途径,目前有很多, 大部分可以通过插件,或主题本身自带来实现。 出于学习的目的,通过以下例子,我们可以自己也实现,集成到我们的主题模板里面。

思路:

利用wordpress文章的meta(文章自定义字段)来记录对应文章的总阅读数。
创建一个该统计的url, 可以通过js访问来增加阅读量,这样就可以避免蜘蛛爬虫访问的时候,爆发式增长阅读量。只记录真实的阅读量。

实现

首先实现文章阅读量的增加:

// 文章浏览统计
function count_views($post){

    $post_id = 0;
    if (is_numeric($post)) {
        $post_id = intval($post);
    } else{
        $post_id = $post->ID;
    }

    $counts = get_post_meta($post_id, 'viewcounts', true);

    if ($counts == ''){
        $counts = 0;
        add_post_meta($post_id, 'viewcounts', 1, true);
    }else{
        update_post_meta($post_id, 'viewcounts', $counts+1);
    }

    return $counts;
}

每次调用将增加传入id的文章的阅读量+1。

接下来,我们需要一条可以访问到这个功能的链接。

通过增加query_vars来增加在访问中解析url中的参数


function myfunc_query_vars($query_vars) {
    $query_vars[] = 'viewcounts';
    $query_vars[] = 'post_id';
    return $query_vars;
}
add_filter('query_vars', 'myfunc_query_vars');

这样在每次wordpress解析url中的参数的时候,如果里面有viewcounts和post_id将不会忽略,并保存在WP实例中。

下面将两个结合起来,就可以通过url添加参数式的访问,来增加文章访问量的结果。

function myfunc_viewcounts(WP &$wp) {

    if (!array_key_exists('viewcounts', $wp->query_vars) or !array_key_exists('post_id', $wp->query_vars)){
        return ;
    }

    $post_id = $wp->query_vars['post_id'];

    $counts = count_views($post_id);

    echo $counts;

    die();
}
add_action('parse_request', 'myfunc_viewcounts');

这段代码的意义是,它将截取url中同时有viewcounts和post_id参数的url,并通过调用增加访问的方法来实现文章阅读增量。最后用die(),结束这次的访问,因为这个文章打开后,再通过js来访问的链接,而且wordpress后面只会跳转到404,所以后面就不用管了, 在这里结束就行。

以上代码,可以放到主题的functions.php 文件中,即可运行。