在 WordPress 中统计文章浏览数并根据浏览量排序列表

Posts 的遍历

如果我们在 WordPress 里面,要遍历一个文章的列表,我一般是这么做的:

$args = array('orderby' => 'post_date', 'order' => 'DESC', 'posts_per_page');
$posts = get_posts($args);
foreach($posts as $post) {
    // Do whatever you want to do with the post.
    // 此处对你遍历到的文章可为所欲为
}

通过 get_posts 里面传进去的 $args 参数选项,可以构造出不同的效果,下面列示几个常用的例子:

1. 获取分类下的文章列表:

$args = array(
    'category' => $cat,
);

2. 获取有特色图像的文章列表:

$args=array(
    'numberposts' => 8,
    'meta_key' => '_thumbnail_id',
    'orderby' =>'modified',
    'order' => 'DESC',
);

然后基本上都是围绕这个 query 来搞的,更多的常用查询在这里就不多赘述。

那么问题来了

在 WordPress 里面如果我们想生成一个文章列表的遍历,以文章的访问数来排序,怎么办呢?

经过长时间的调研,原生的 wordpress 是没有做访问记录的,因此,我们要自己来搞。

首先,我们要利用 Post Meta 来记录每篇文章的访问数量,然后让其自动更新:

在插件或者模板的 functions.php 里面定义如下函数。

function getPostViews($postID){
    $count_key = '_post_view_count';
    $count = get_post_meta($postID, $count_key, true);
    if($count=='') $count = 0;
    return $count;
}

function increasePostViews($postID) {
    $count_key = '_post_view_count';
    $count = get_post_meta($postID, $count_key, true);
    if($count==''){
        $count = 0;
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, $count);
    } else {
        $count++;
        update_post_meta($postID, $count_key, $count);
    }
}

注意,这里主要用了 get_post_meta delete_post_metaupdate_post_meta 这三个函数。

然后呢,在这里面,我们为文章维护了一个 meta 值:_post_view_count,然后每次调用一次 increasePostViews 就可以让文章的计数加一。

所以我们要把这一块放到 single.php 里面:

// /wp-content/themes/the_theme/single.php
// ...
<?php increasePostViews(get_the_ID()); ?>
// ...

这样,就可以统计访问量了。

回到我们的问题

有了访问量,我们可以写查询,但是如何用 post_meta 对文章进行排序呢?

我从 stackoverflow 找到了答案:http://stackoverflow.com/q/11100473/2544762

通过如下的查询:

$posts = get_posts(array(
    "orderby" => 'meta_value_num',
    "meta_key" => '_post_view_count',
    "order" => 'DESC',
    'posts_per_page' => $count,
));

如上,我们可以通过 meta_key 来指定查询的时候 join 到哪一个 meta(注意如果这个 meta 不存在的时候,是会被排除掉的哦),然后通过 ‘orderby’ => ‘meta_value_num’ 就可以按照这个指定的 meta 来排序了。

一切解决得是如此的优美。


【转载请附】愿以此功德,回向 >>

原文链接:https://www.huangwenchao.com.cn/2014/12/wordrpess-popular.html【在 WordPress 中统计文章浏览数并根据浏览量排序列表】

发表评论

电子邮件地址不会被公开。 必填项已用*标注