wordpress

WordPress插件WP Statistics无法保存GeoIP Collection和GeoIP 城市选项的问题

点击数:2

今天在设置WordPress插件WP Statistics插件的GeoIP Collection和GeoIP 城市选项,进行保存的时候,一直无法保存成功,网上搜索了各种设置也无效,最终手动执行成功。

现象:

今天更新了CDN以及停用CNZZ统计转由WP-Statistics完成统计工作,一切都操作完成,查看访问数据时发现没有IP位置信息,经过一番排查确定是GeoIP没有启用,一顿骚操作结果发现设置报错。原因是我的网站服务器是国内的服务器上无法访问GeoIP数据库下载链接的域名,所以在设置GeoIP的时候会提示报错,然后我在Google和百度均没有找到解决方案,后来通过分析WP-Statistics的源代码发现class-wp-statistics-updates.php写明了数据库下载地址,我们只需要修改这个下载链接即可,知道了问题所在接下来开始操作。

报错信息如下:

下载GeoIP数据库时出错: https://raw.githubusercontent.com/wp-statistics/GeoLite2-Country/master/GeoLite2-Country.mmdb.gz-cURL error 28: Connection timed out after 10000 milliseconds

版本信息

WordPress 5.6.1
WP Statistics 13.0.5

解决方案:

方案1:

1、下载数据库

Github最新数据库:GeoIP国家 GeoIP城市
我的国内同步备份(不保证是最新版):GeoIP国家 GeoIP城市

2、将下载后的文件上传到网站目录下,地址为:

如果没有wp-statistics目录,那么手动创建,将下载的文件传到其目录下,如上图。

方案2:

1、需要修改的文件路径
wp-content/plugins/wp-statistics/includes/classes/class-wp-statistics-geoip.php

(请注意此路径,网上很多方法都是修改update.php,发现找不到geo相关的信息)

修改代码github处的文件链接,链接可以是自己网站上的,也可以用我提供的CDN链接。
https://cdn.rosm.cn/GeoLite2-City.mmdb.gz
https://cdn.rosm.cn/GeoLite2-Country.mmdb.gz

2、保存PHP后重新设置即可。

设置成功后要在优化里面更新下国家/地区的数据,不然之前的数据不会显示国家和地址。

解决 wp-staticstics 无法启用 GeoIP 的问题

在访问识别中,勾选 GeoIP 收集GeoIP 城市后,点击更新进行保存,然后会发现网页一直转圈最后也没有勾选上。

GeoIP 可以通过访问者的 IP 获取对应的国家和城市信息,通过 IP 查询这些信息是在对应的数据库中,wp-statistics 开发者将数据库存在 GitHub 上的,如果博客服务器是在国内的,去 GitHub 上下载文件的话速度十分慢甚至无法访问,这也是为什么无法启用 GeoIP 的原因。

那么这里就可以采用手动下载的方式,数据库有两个,分别对应国家的和城市的,项目地址如下:

https://github.com/wp-statistics/GeoLite2-Country

https://github.com/wp-statistics/GeoLite2-City

对应的下载链接为

国家: https://raw.githubusercontent.com/wp-statistics/GeoLite2-Country/master/GeoLite2-Country.mmdb.gz
城市:https://raw.githubusercontent.com/wp-statistics/GeoLite2-City/master/GeoLite2-City.mmdb.gz

下载需要科学上网,或者用迅雷,下载后先解压得到扩展名为 .mmdb 的文件

然后手动上传到服务器上,路径:

【wordpress根目录】/wp-content/uploads/wp-statistics

然后再次前往设置,就能勾选保存了。

最后在访问统计中就会显示访问者的区域了

WordPress文章阅读量统计和显示(非插件, 刷新页面不累加)

WordPress文章阅读量统计实现思路:

 

每进入一次文章详情页面, 就会通过cookie判断该用户是否在设定的过期时间内访问过该文章, 若没有访问过, 则浏览次数增加一次。

 

实现流程如下:

 

1.添加以下代码至主题的functions.php文件, 放在该文件最下面即可:

复制代码
function getPostViews($postID){
    $count_key = 'views';
    $count = get_post_meta($postID, $count_key, true);
    if($count=='' || !$count){
        return "0";
    }
    return $count;
}
function setPostViews($postID){
    $count_key = 'views';
    $count = get_post_meta($postID, $count_key, true);
    if($count=='' || !$count) {
        $count = 1;
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, $count);
    }else{
        $count++;
        update_post_meta($postID, $count_key, $count);
    }
}
复制代码

 

2.添加以下代码至主题的single.php 文件, 时间间隔可自定义设置, 放在该文件最上面即可:

复制代码
<?php 
if(!isset($_COOKIE['views'.$post->ID.COOKIEHASH]) || $_COOKIE['views'.$post->ID.COOKIEHASH] != '1'){
    setPostViews($post->ID);
    setcookie('views'.$post->ID.COOKIEHASH,'1',time() + 99999999,COOKIEPATH,COOKIE_DOMAIN);
} 
?>
复制代码

 

3. 将以下代码添加到要显示浏览次数的位置, 例如 文章列表(template-parts/content.php), 文章详情页面(template-parts/content-single.php), 搜索结果页面(template-parts/content-search.php)等。

<?php echo getPostViews(get_the_ID());?>

 

以下是我的个人博客  添加展示阅读量的代码和实际显示效果。