StatPressCN,1.6.9.9版本

功能开发:

  1. 在朋友来访栏目中为朋友添加头像(gravatar),更直观;
  2. 增加了对朋友留言情况的统计显示,总留言数,最近一次留言时间和内容;
  3. 增加对朋友总访问数的统计显示;
  4. 丰富了详情中的内容,增加了直接点击发邮件给朋友的功能。

def规则:

  1. 搜索引擎数据定义:新增了对Google mobile的支持,www.google.cn/m;lai79的识别,www.lai79.com;
  2. 爬虫数据:北大学生爬虫的识别,PKU Student spider。

代码改进:

  1. 更新了部分本地化语言;
  2. 修正了对sharethis识别逻辑;
  3. 彻底解决了朋友中仍显示垃圾评论者的问题。

下载升级:

  • 请到wordpress官方插件网址下载最新版本,ftp到服务器上去;
  • 或者,如果您的wordpress是2.7版本以上的,那就耐心等段时间(大约几个小时吧),管理后台会自动提示升级的;
  • 提示:升级至本版本不会影响数据库中的数据记录。

升级需做:

  • 在StatUpdate(统计升级)中任何选项都不需要选中,执行一次升级(就是点那个升级按钮),作用是清理垃圾评论者的访问记录。

开发笔记

对于sharethis的逻辑判断经检查还是出了问题,应该分两层:先判断querystring中是否包含akst_action字样,如果有的话还要看是否包含了p=90之类的链接符号,后者说明blog没有设置永固链接,需要从querystring中提取出文章链接;如果仅包含akst字符串,则放弃querystring,转用requesturi。【换了种思路解决问题简单好多,还有效率也有很大提升,那就是先判断?后是否有p=99之类的硬链接,有的话就提取,并根据是否设定了永固链接获得permalink后存入数据库,如果没有则只取?前的部分直接存入数据库,判断提取语句如下:preg_match(“@(p=\d+|post_id=\d+|page_id=\d+)@”,$urlRequested,$matches)】

wordpress在2.7以上版本中是默认支持gravatar的,用法其实很简单,就是调用get_avatar($email)就ok了。如果要全面,可以加个判断版本低的话直接调用img src,用链接直接调用。

<span>在css中还是比较好用的,一连串的span不会像p那样自动换行。

单复数的问题用?符号最好处理:print $commentleft.” “.($commentleft>1?__(“comments”,”statpresscn”):__(“comment”,”statpresscn”));

在判断是否垃圾评论者的逻辑上,分析如下:先允许所有评论者进来,让Akismet进行过滤,让管理员对首次留言者进行审核,然后再显示朋友来访时再判断是否是正常的朋友留言或访问,通过手动统计更新清除那些垃圾评论者的访问记录(这个应该设定成自动)。

StatPressCN,1.6.9.7版本

下载升级:

  • 请到wordpress官方插件网址下载最新版本,ftp到服务器上去;
  • 或者,如果您的wordpress是2.7版本以上的,那就耐心等段时间(大约几个小时吧),管理后台会自动提示升级的;
  • 提示:升级至本版本不会影响数据库中的数据记录。

升级需做:

  • 无。

功能开发:

  1. 侧栏小工具“最热博文”中可设定时间范围了,比如最近7天的热文、最近三个月的热文等;
  2. 在管理面板上显示统计信息;
  3. 过滤掉user heart5的访问记录,方便测试;
  4. 不定期优化统计数据库(1000次访问执行一次);
  5. 所有的统计子页面都添加效率执行检测模板,在页脚。

def规则:

  1. 增加了两个Google的新规则。

代码改进:

  1. 更新了部分本地化语言。

开发笔记

Maxim提了几个建议,一个是在“详情”中显示的页面包括首页是不应该的,这个数据和widget中最热博文不一致,其次是希望在“最热博文”中可增加时间范围选择。第一个问题me系统思考了下,还是坚持目前的做法。因为在这里是对所有链接请求的统计,比如tag、分类等,和页面是同等地位,但是在博文中则仅仅针对帖子文章,这两个不是一码事。在“最热博文”中增加时间选项倒很实用,me已经实现了这个功能,现在您可以自由设定时间,显示“最近三个月的最热贴”等。解决这个问题的时候me发现widget的所有信息是以数组的形式存放在option表中的。

看到akismet中有个随机执行comments数据库清理优化的代码,觉得很好。既不用每次都运行,消耗系统资源,又能在一定时间内实现代码的执行。运用了mt_rand函数产生随机数,然后设定一个幸运数,符合的时候就执行一次。呵呵,照抄过来,用在了statpress统计数据库的清理优化。再一个想学习的地方是akismet在管理面板中显示的统计信息,比如过滤了多少垃圾评论等。检查代码原来是使用了add_action(“activity_box_end“,’heart5_dashboard_4_spc’);直接借鉴过来就好了。StatPressCN在这里显示的信息是StatPressCN widget中的信息,不过关于版权标记和页底效率监测则需要过滤掉,需要判断是在哪里调用的。如果是管理界面就不显示,正常的来访则显示。

StatPressCN,1.6.9.6版本

下载升级:

  • 请到wordpress官方插件网址下载最新版本,ftp到服务器上去;
  • 或者,如果您的wordpress是2.7版本以上的,那就耐心等段时间(大约几个小时吧),管理后台会自动提示升级的;
  • 提示:升级至本版本不会影响数据库中的数据记录。

功能开发:

  1. 和wp-comments数据库联动,自动过滤掉垃圾留言者的访问记录;这样“朋友来访”显示的朋友访问列表就更精准了
  2. 修正了widget中可用参数不准确的问题,主要涉及今日来访数量、昨日来访数量、今日页面访问数量、昨日页面访问数量;
  3. “朋友来访”中显示的数量增加了50的选项卡,现在可以设定为5、10、20或50个了。

def规则:

  1. 增加了yahoo日本、cnnic的搜索引擎规则;
  2. 增加了Ginxbot、FairShare、Congentbot爬虫规则的识别。

代码改进:

  1. 在“支持”的调试信息中增加了时区和utc时间、本地时间内容显示;
  2. 在“支持”函数体中共享global $wpdb;
  3. 增加了对博客网址的识别,对me的天高云淡不再显示iframe框架调用;
  4. 动态识别blog网址(通过get_option(‘home’)函数;
  5. 修正widget中可调用参数的时间识别。

升级需做:

  • 升级至1.6.9.6版本后,请进入“系统更新”,选项卡一个都不要选,运行一次“更新统计系统和数据记录”,这样会清理掉那些垃圾留言者的访问记录。

开发笔记

听了dust2k朋友的建议后开始认真考虑过滤掉垃圾留言者。原来曾经尝试过,对akismet的运作机制不甚了了,也就作罢了。这次重新启动,一定要搞定。仔细研读了akisme的代码,它主要是针对comments进行相关处置的,并且是借助了集中存放规则的网络服务器进行的,每次判断都会提交到查询服务器上去(这种机制其实是最高效的,sharethis就是这样升级的,可惜me没有服务器资源,只好在每个版本中自带dat文件进行规则更新)。打开wordpress的默认数据库comments看了下,记录了每条留言的id、ip、agent、内容、留言者等等,其中有一项是是否验证通过。仔细考虑了下,其实基本不关akismet的事情。在StatPressCN记录ip之前,看看是否是comments表中被标记为spam就行了。

昨日访问和今日访问数据不对,刚开始以为差一天,后来发现差了是几个小时。上午测试发现不仅仅是8个小时,而是16个小时,看来问题出在时区。简单的查阅了mysql的时间函数后就更改了代码,结果和php的gmdate不太一样。关键还是时区问题。经过仔细测试,发现还是utc时间好用。机制大约这样:查找blog option中的时区设定,再结合utc时间进行处理,就能得到当地时间。但是用sql语句得到时间效率高还是php本身的时间函数效率高就不清楚了,以后有时间再测试下。

处理访问记录中的spam

做blog访问统计插件,所有的个性化创新功能都是为了方便站主或博主。StatPressCN作为基于wordpress网志的统计插件,必须要结合网志的特点提供特色功能。最开始接管StatPress的时候,就对提供的最近来访者、最近的搜索关键词以及对供稿(feed)的处理比较满意,后来结合近来移动上网(通过手机等)迅猛增加的发展趋势新增了“移动访问分析”板块,这两天又增加了“朋友”功能,呵呵,这可是其他常规统计插件不可能提供的哟。然而,这一切,都以能得到纯净的访问记录为前提,这中间的关键是,把spam给有效的识别出来并做相应处理。想起原来的访问记录居然是常规第三方统计插件(如GA、yahoo统计等)的两倍多,汗颜啊,惭愧啊,不过现在已经非常准确了,估计比那些通用插件还要精确些呐,呵呵,因为me自认对spam的处理还是非常精确高效的。

spam指的那些无聊甚至恶意的访问,属于非自然人访问的一种(另外一种是大名鼎鼎的spider)。大多数是为了做广告、拉流量,也有一些是三脚猫黑客的造访记录。wordpress提供了较好的防止spam功能,比如留言审核(可以设定为全部审核或首次审核),另外还有第三方插件,比如鼎鼎大名的Akismet可以过滤垃圾评论。但是这并不能禁止所有的spam,它们该来还是来了。

首当其冲的是三脚猫黑客的恶意访问。一般情况下大家架的blog不会夹杂其他程序或服务,这样就给识别这些恶意访问提供了方便。比如asp后缀名文件的访问(明明服务器端脚本用的是php嘛)、对“网站.rar”的请求(估计是针对那些打包上传空间的漏洞的)。对于这些访问,不能轻易在StatPressCN中忽略了事,还要做针对性处理。最直接的方式就是禁止这些ip访问,采用.htaccess文件进行限定,具体办法见博文“黑客黑啊”。考虑每次上传下载.htaccess文件不方便,me在StatPressCN中提供了动态更新.htaccess规则的子页面(可以在选项中使能)。

其次就是那些试图通过注册为用户的方式阿布广告的访问。为了让新朋友方便,一般的blog都设置为“任何人都可以注册”,这一方面提供了用户友好度,显得我们很好客嘛,呵呵,但另外一方面也给那些spamer提供了方便。对于那些偷偷溜进来的spam,第一道关自然是Akismet,但也有些漏网之鱼,那就靠自己识别了。前两天发现不少对“/wp-signup.php”的访问,me还以为是有用户注册呢。后来遍查wordpress的源文件库都没有发现此文件。后来在网络上搜索才知道,原来是针对wordpress mu的漏洞来的。对这种访问量刑后觉得罪不当诛,在记录时忽略了事好了。

最后一种则是那些隐形spider,其中以微软的live为最。对于这种偷偷摸摸的行为说实话没啥好的识别办法,就是注意观察那些短时间内大量的连续访问(任谁都不可能半分钟内访问三十多页面吧,服务器也反应不过来啊),查出来就把ip拉入banip.dat文件进行阻止。再一个方面是看“详情”板块中的“倾情粉丝”,呵呵,一个月内访问了几百页面的可能是“粉丝”,也可能是spam哟。把那些ip在“搜索”中查查就可以了。

对spam的处理其实只有两种,要么在统计是忽略它,如果是恶意的,要考虑同时把ip通过.htaccess机制完全禁止访问(要小心,不要误伤)。

wordpress汉化使用和技巧

语言障碍是国内用户的普遍问题,这很要命,要知道按照我们国家目前的发展轨迹,我们非依赖欧美英语文化不可,因为我们好像一切都在学习他们,一切好东西好像都是那边传过来的。不懂英文就像是把窗户都关上了,唉,悲惨的很。要解决这个问题,不能要求中国像印度那样当回殖民地,那就只能全民学英语,效果又很差,咋办,把英文即时转成汉语就好了。说起来简单,做起来很难,因为这是个系统工程,所涉甚多甚广。教育线:原来从初中开始的英语课现在已经从幼儿园开始了,效果咋样确实难说,但现在很难找到工作的大学生英语水平普遍较差却是事实;专业线:外国语学院算是专业培养语言人才的了,但它们能做的事情仍然是影响所谓翻译界,圈子很小;技术线:Google的在线语言翻译蹒跚到现在中算小有所成,但和实用差距还不是一般的小,不知所云的翻译比比皆是,将来wiki方式的纳入可能会解决部分问题,但实用化仍很难,需要理论的突破和技术的积累;志愿者线:me刚加入的译言是典型,靠兴趣和志愿精神及时转化国外最新讯息,很难成规模;工具线:遍地开花的汉化网站好像都活的不错,实际情况是连me已经比较喜欢(这两年基本不去了)汉化新世纪也在逐步商业化庸俗化,不是能找来crack,估计去的人也不会多,但把一些实用的日常的工具中文化应该是比较现实也比较实用的。感慨发完,me来说说如何汉化wordpress这个最流行的blog工具系统。

一、如何使用wordpress的中文包

随着wordpress的流行,国内做汉化的还是很多,您可以在网上随便Google下就可以找到很多中文包,各个版本的都有。me这里讲讲如何使用。

  1. 得到特定版本wordpress的中文语言包。版本一定要对应,是2.6.3就是2.6.3,不可混用。得到的中文语言包应该是后缀名为mo的文件,名称一般是zh_CN.mo这样的。
  2. 把该文件上传到服务器blog安装目录(不见得是根目录哟)下的wp-includes/languages下。
  3. 修改blog安装目录下的wp-config.php,找到增加修改语句define (‘WPLANG’, ‘zh_CN‘);。注意到没有这个定义和语言包是对应的。
  4. OK!再进入blog的管理后台就是中文界面了。当然,大家访问您的blog时会发现部分内容已经是中文了,比如分类标签之类的,但很不完全,这取决于您使用的主题是否汉化了。

二、如何汉化主题或插件

一般情况下,主题和插件都是英文的,因为是英语用户开发的,即使是中国人开发的,考虑到兼容沟通等问题,界面也一般是英文的。怎么办?首先我们要看看该主题或插件是否支持汉化(对我们是汉化,也可能是韩化或印度化,呵呵,其实这里是指国际化语言支持),标志是代码中是否有__($text)_e($text)__ngettext($single,$plural,$number),如果有这样的命令,有门,否则就算了吧,除非您确实懂php编程,那样的话您可以手工把上面修改成支持国际化语言的版本,呵呵。我们就按支持国际化语言的说吧。

  1. 下载poedit软件并安装,然后选择中文语言界面。
  2. 新建消息目录文档。填写相关信息:首先是工程信息,包括工程名称版本(自填,这里那akismet做例子)、团队(自填)、专用电子邮件(自填)、语言(Chinese)、国家(CHINA)、字符集(UTF-8,推荐选这个)、源代码字符集(一般也是UTF-8)、复数形式(这样写:nplurals=2; plural=1;)等;其次是路径,包括基本路径(这个很关键,是您要汉化的主题所在目录,不提供浏览功能,需要您手动记录并填写进去)和路径(填小数点.,是当前目录的意思);第三是关键字(加三个,分别是___e__ngettext:1,2
  3. 确定后会提示保存po文件。您要找到源文件的目录并把文件名称从default.po改为zh_CN.po,保存。
  4. 在消息目录文档管理员界面中找到akismet工程,双击刚才命名的那个akismet-zh_CN.po,进入翻译窗口。
  5. 翻译界面很直观,在左下角窗口写您的翻译,右下角窗口写注释(这个me一般没写,呵呵);逐条翻译后按第二个按钮保存。以后如果代码更新了(比如升级了版本之类的),只要名称未变,您按第三个按钮(就是那个互联网地球)可以更新需要翻译的语句。
  6. 翻译好了就保存吧。没其他工作了,您只需要把生成的akismet-zh_CN.mo上传到服务器上该插件目录就行了。

三、注意事项和技巧

翻译的时候不需要规规矩矩,可以有些个性化的甚至俏皮的翻译,比如me对自己开发的StatPressCN中文化时,就把TOP DAY翻译成了“洪水泛滥的日子”,呵呵。

四、me汉化的主题和插件中文语言包(暂缺

主题

插件

五、更多资源

如果有兴趣,您可以看看下面这些文章,讲理论还是比较系统的。

汉化WordPress教程

WordPress汉化手册

正确使用gettext来翻译Wordpress主题