WordPress记录链接点击

很多网站都在跳转前增加一个链接,一方面为了防止另外的网站通过Referer获取信息,另一方面可以掌握访客点击链接的数据,因为如果跳转到站外就没有Web日志,对用户点击站外链接的情况就会一无所知。话不多说,记录一下方法

首先在Wordpress数据库执行以下SQL语句增加一张记录链接点击的表

CREATE TABLE `wordpress`.`wp_click` ( 
`id` BIGINT NOT NULL AUTO_INCREMENT ,
 `url` TEXT NOT NULL ,
 `time` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ,
 `ip` VARCHAR(50) NOT NULL ,
 `ua` TEXT NOT NULL ,
 PRIMARY KEY (`id`)
) ENGINE = InnoDB;

随后在网站根目录建立名为go的文件夹(这个文件夹可以任意起名,只要把之后相应位置的所有go改为自定义的名字就行),在go文件夹下创建 .htaccess和index.php两个文件

.htaccess文件内容如下

RewriteEngine On
RewriteRule ^index\.php$ - [L]
RewriteRule . index.php [L]

index.php文件内容如下

<?php
$url=substr($_SERVER['REQUEST_URI'],4);
if (strtolower(substr($url,0,4))!='http' || substr($url,0,9)=='index.php')
	exit('无效网址');
require( '../blog/wp-load.php' );
$wpdb->insert('wp_click',array(
	'url'=>$url,
	'ip'=>$_SERVER['REMOTE_ADDR'],
	'ua'=>$_SERVER['HTTP_USER_AGENT']
));
header('Location: '.$url);

为了防止无限跳转,php程序中禁止了相对路径和对index的访问。代码中第5行require的是博客目录下的wp-load.php,前面的 ../blog/ 是因为我放在blog目录下,如果相对路径不同需要修改require的参数

到此就写好了跳转记录功能,例如访问https://www.zhouii.com/go/https://www.baidu.com/就能跳转到百度了,通过phpMyAdmin等软件就可以从数据库中看到访问记录,通过SQL语句还能实现各种统计

接下来需要修改Wordpress代码使文章显示时给所有链接前加上https://www.zhouii.com/go/

从Wordpress后台“外观”下的“主题编辑器”修改functions.php,增加如下代码

function record_click($content) {
	preg_match_all('/<a.*?href="(.*?)".*?>/',$content,$match);
	if($match){
		foreach($match[1] as $url){
			if(strpos($url,'://')!==false && strpos($url,home_url())===false){
				$content=str_replace("href=\"$url\"", "href=\"".home_url()."/go/$url\" ",$content);
			}
		}
	}
	return $content;
}
add_filter('the_content','record_click',999);

这段代码可以在输出内容前先由record_click函数处理,函数内修改外链给链接前增加https://www.zhouii.com/go/,不修改本站链接(无论是相对路径还是绝对路径)因为本站的链接点击能从日志得知,无需多耗资源来跳转和记录。

从此任何人点击本站的外链我都能记录并进行统计啦

2020年3月5日

发表评论

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

地方所限只列了这些常用的,但如果你打开例如https://tiny.zhouii.com/qqemoji/e888.gif发现不是404也可以手动加入[e888]之类的喔~