[wordpress plugin] FS Hide Time

朋友,你是否从牙牙学语的时候,就开始坚持写自己的blog?十年浩劫中,你的服务器是否幸运地未受影响,从而把所有旧时文字都保留下来,并且成功地移植到了wordpress上?然后时隔多年回头看去,会觉得那些文字很傻很天真,傻丫得简直不配和现在的你,共存在同一个blog系统,但就这么删了又有些舍不得?又或者当你被生活已经恶心成另一个人后,就只能坐在电脑前羡慕地翻看着那个鲜活的不是你的你,刹那芳华红颜弹指,至少那些文字中不时流出的和前男友的巫山云雨,总要藏起来只有自己看到才好。

用我的插件吧。

这个插件可以把你指定时间之前的blog文章设成隐藏(private),或者自动把xxx天前的blog文章设成隐藏。

1. 本插件只对【文章(post)】进行操作,【页面(page)】不受影响。
2. 本插件只对类型为【已发布(publish)】和【私有(private)】的文章进行操作,类型为【密码保护】的文章不受影响。
3. 在隐藏以前的文章时,那些之前就已经单独设置为私有类型的文章,本插件会将其记住,确保以后批量取消隐藏时,不会将其一起公开。
4. 本插件是通过把文章设成【私有(private)】来实现隐藏的,因此基本只对单用户blog好用。如果wordpress中存在多个admin用户,或者专门进行了其它的权限设置,则不保证你的私有文章不会被别人看到。

Plugin Name: FS Hide Time
Version: 0.8
Author: fivestone
Requires at least: 2.7
Tested up to: 2.9

  FS Hide Time (16.7 KiB, 572 hits)

== Description ==
This plugin can batch hide the articles posted before some date, or automatically keep hiding the articles posted several days ago.
1. The hide operation only affects on posts, but not on pages.
2. The plugin only changes the posts with the visibility "public" and "private". It does not touch the "password protected" ones.
3. The plugin can remember the posts which you already set as private before, to make sure they won't be changed into public when you cancel the hiding plugin.
4. This plugin hides posts by setting them to private visibility. If there were other admin users or some extra permission setting in you wordpress, maybe you private articles are still visible to someone else.

== Installation ==
1. Upload the directory "fs-hide-time" to the "/wp-content/plugins/" directory
2. Activate the plugin through the 'Plugins' menu in WordPress
3. In menu "Setting -> FS Hide Time", generate the digests manually.

== Screenshots ==

WordPress中的标点符号转换 – 2

以前提到过 wordpress 会把诸如 "--" 之类的符号自动替换成 "—" 等全角字符,解决方法是在 formatting.php 中修改 wptexturize() 函数,但这样子修改,每次wordpress升级都会被覆盖。于是就想写个插件解决。但用插件的话就只能把整个 wptexturize() 都禁用掉。这个函数的其它部分是一堆转义代码,一时看不懂什么意思,担心禁掉后会不会被人在留言里用script渗透。就放在一边一直没有弄。刚刚看了看,应该和script没关系,可以完全禁掉的。

然后发现早在07年,就有先贤写过一个只有三行的叫做 Disable wptexturize 的插件,用来禁掉这个函数。但是....为什么这个插件也叫做wptexturize?也就是说只有已经知道了这个函数的存在的人,才能够搜索到这个插件,而通过其它如 "disable auto format / convert" 之类的关键字,基本上是搜不到的。

程续缘真是可悲的物种啊。

[wordpress plugin] FS Twitter Digest

a: 你blog顶上那个状态是怎么弄的啊?
f: twitter-tools,把我发在twitter的状态同步到blog。
a: 。。twitter。。。。如果不用twitter。。你推荐什么呢?
f: 那你打算在哪里写你的状态呢?
a: 我的blog亚。。
f: twitter-tools,你可以在blog后台写了让它发到twitter再同步回来...反正你如今从海外服务器连twitter不用翻墙了。

嗯,恭喜a伉俪网站成功翻墙以及双双告别cn生涯~~ 用twitter-tools显示状态的时候,可以在边栏使用插件自带的widget,也可以编辑后台主题,在你想要显示的地方写上

<?php aktt_latest_tweet(); ?>

话说twitter-tools有个功能,可以自动把你每天/每周发的tweet整理成一篇文章发到blog上。但每天/每周这个频率太夸张了,乃至自己正常的blog文章会完全淹没在这种话痨帖里,所以很多人用了这个功能没几周就受不了又关掉了。后来我把twitter-tools修改了一下,可以指定日期范围手动生成,然后通常每个月来一次

后来这个修改版给过几个人。但我当时是在Twitter-tools 1.0的代码里修改的,如今都2.2了(虽然没觉得添加了什么功能……),一直不方便升级。刚刚又弄了一番,把那段修改的代码拿出来,作为一个独立的插件,和twitter-tools分离开。

用这个插件的前提:
1. 你wordpress所在的服务器可以访问twitter;(如今还有在墙内活着的个人wordpress么?)
2. 你在用Twitter-tools

生成的整理帖,其中的作者、分类、标签,都根据twitter-tools里的设置自动生成。除了题目和日期外,和twitter-tools生成的格式完全没区别。我自己用的时候,把twitter的输出格式稍微改了一下,这个功能也放在插件里了。你可以在程序第61行把调用函数改成fis_gene_digest(),然后到那个函数里去手动改输出格式。

a同学的想法还是要赞一下的。因为我当年开始用twitter,就是之前看到某博客网站有个可以自己写一句话显示在页面顶部的功能,觉得不错,也想在wordpress里写一个,后来研究了一下才决定用twitter来辗转实现的。个么我的twitter主要还是用来写自己的琐碎,对那些号称要多@别人参与讨论的说法,从来都是无视。别人@给我的,其中聊天性质的也不大想re。我的twitter信息同步到了很多其它网站。大家更多的是在friendfeedgoogle buzz上讨论,个人更喜欢friendfeed一些。

Plugin Name: FS Twitter Digest
Version: 0.8
Author: fivestone
Requires at least: 2.7
Tested up to: 2.9

  FS Twitter Digest (15.1 KiB, 552 hits)

== Description ==
As a patch to Twitter-tools, this plugin help users post the twitter digest bwtween the manual dates.
The digests use catalog and tag info as what you set in Twitter-Tools interface. It's all the same as the "Create a daily/weekly digest" function in Twitter-tools, except the title and the date.
If you are a coder and wish to customize the format in the digest, you can change the code at Line 61, and design your own output in the function fis_gene_digest().
This patch was tested successfully under the Twitter-tools version 1.0 - 2.2.1

== Installation ==
1. Ensure you are using the Twitter-tools plugin.
2. Upload the directory "fis-twitter-digest" to the "/wp-content/plugins/" directory
3. Activate the plugin through the 'Plugins' menu in WordPress
4. In menu "Setting -> FS Twitter Digest", generate the digests manually.

== Screenshots ==

[wordpress plugin] Disable Comment RSS

Plugin Name: Disable Comment RSS
Plugin URI: http://code.google.com/p/wp-disable-comment-rss/
Blog URI: http://blog.fivestone.info/?p=664
Description: Disable RSS of posts or comments separately
Version: 0.8
Author: fivestone

  Disable Comment RSS v0.8 (27.1 KiB, 553 hits)

== Description ==

User can choose to disable the RSS for the posts or the comments, or both of them.

Background:

I am using the plugin "Whisper" to make some comments invisible, but they still appear
in the comments RSS. Then I want to disable the comments RSS while keeping the post
RSS valid. There seemed no proper plugin for it, so I write this one.

== Installation ==

1. Upload the directory "disable-comment-rss" to the "/wp-content/plugins/" directory
2. Activate the plugin through the 'Plugins' menu in WordPress
3. In menu "Setting -> Disable Comment RSS", choose the RSS which you want to disable.

== Screenshots ==

----------------------------------------
第一次写 wordpress 插件,练练手~~

功能很简单:禁用RSS。上次装了留言悄悄话插件后,一直在找有什么插件能把评论的RSS禁掉,但网上能找到的都是连文章RSS一起禁的,手动改代码又不方便自动升级。不能忍了干脆自己写一个玩,可以在菜单里选择你要禁用文章的RSS还是评论的RSS。

Version 0.8 公测。大家试试哈。过几天稳定的话,改成1.0提交到官网去。我一直以为所谓 wordpress 用户就是 wordpress.com 上的用户,原来不是。。。wordpress.org的fivestone居然被人注册掉了,这个是用来定义作者署名的啊呜呜呜。

WordPress 的文章收藏插件

某人问起有些blog文章后面那些收藏的按钮怎么弄啊,正好我从上次删掉ShareThis后也一直想再弄个类似的玩玩。网上转了一圈,相关的wordpress插件很多,但大部分(如ShareThis、AddThis、add-to-any、以及我爱水煮鱼的国内精品17fav)都是把主程序建在他们自己的服务器上,在blog里插入一段js,访问它家的服务器,才能中转到进行收藏的网站。

实在搞不懂他们为什么要用这样的架构。每次收藏都访问服务器,大大增加了页面读取的时间,甚至当读者网络不畅(如教育网不能访问ShareThis)以及某些不靠谱的时候,会发生完全不能使用的情况。最不爽的是用户只能在网站提供的那些收藏站点间进行选择,不能自行添加要收藏的地址。而那些插件的提供者也不大可能牛x到要网站们过来给钱求着,才给你添加收藏按钮的程度。个么除了能够享受PR激增的快感外,看不出有这样做的必要。这样的插件,完全可以纯在本机运行。

于是找到了Sociable,完全在本机运行的收藏插件。界面看着也比较清爽,用户可以在列表中选择要显示在页面上的收藏按钮,调整其先后顺序。也可以通过编辑插件的php文件,比较轻松地增加通往新的收藏站点的按钮(如果能在后台界面中管理就更好了)。试着编辑了一下,添加了下列网站的收藏按钮:

Google Reader、豆瓣、九点、校内、开心、嘀咕、饭否、QQ书签、百度搜藏

后面几个服务我从来没用过,甚至觉得显示到它家的收藏按钮会降低本blog的品味 @.@ 但既然是大势所趋,也就无妨顺手加到后台列表里面,大家可以按口味选择。

另外,因为 Google Reader 的Note in Reader功能只能对当前页面的地址起作用,不能在blog首页的文章列表中获取单独某一篇的url,所以专门对此类网站添加了singleonly属性,只有单篇blog页面下,按钮才会显示:

if ( true == $site['singleonly'] && !is_single() ) continue;

Google Reader的图标和Google Mark的图标重复了,看着不舒服,大家有什么建议么?

调整了一下显示页面,使title和图标在同一行显示:

// $html .= "<div class=\"sociable_tagline\">\n";
$html .= stripslashes($tagline);
// $html .= "\n</div>";

修改后的插件在这里提供下载:

  Sociable 3.3.1 fixed (219.2 KiB, 1,198 hits)

如果需要新的收藏按钮又自己懒得动手的,可以在留言里提出,我会酌情添加进去。

升级到 WordPress 2.7

本站更新技术日志

因为文件结构变动较大,不在原来2.6的基础上做版本管理了,另开了一个2.7的branch,把需要的改动手动合并过去。

最大的变动是采用了Thread Comment,可以针对某条留言进行回复。本来wp 2.7自身添加了留言回复模块,但需要在使用的主题里更改代码,弄着很麻烦。所以还是用了刚升级到能够兼容2.7的wordpress-thread-comment插件,感觉很好用。反正后台数据结构都一样,以后也有再换的余地。

之前我都是延续从歪酷留下来的习惯,直接编辑留言,用缩进<blockquote>的方式做回复。这次直接在数据库里写了几句SQL,把原来的那些回复分离成现在的thread方式。有需要的可以参考一下(随手写的,懒得做优化了)。

CREATE TABLE IF NOT EXISTS `comment_tmp` (
`id` bigint(20) unsigned NOT NULL,   `idx1` int(10) unsigned default NULL,   `idx2` int(10) unsigned default NULL,
`c1` text,   `c2` text,   `c3` text,   PRIMARY KEY  (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

insert into comment_tmp (id,c1) (select comment_id,comment_content from wp_comments where comment_content like '%<blockquote>%');
update comment_tmp set idx1=locate('<blockquote>',c1);
update comment_tmp set idx2=locate('</blockquote>',c1);
update comment_tmp set c2=trim(trim('\n' from substring(c1,1,idx1-1)));
update comment_tmp set c3=trim(trim('\n' from substring(c1,idx1+12,idx2-idx1-12)));

INSERT INTO wp_comments
(comment_post_ID, comment_author, comment_author_email, comment_author_url, comment_author_IP, comment_date, comment_date_gmt, comment_content, comment_approved, comment_agent, comment_type, comment_parent, user_id)
(select
comment_post_ID, 'fivestone', 'mail@mail.com', 'http://blog.fivestone.info', '', DATE_ADD(comment_date,INTERVAL 2 MINUTE),DATE_ADD(comment_date_gmt,INTERVAL 2 MINUTE), c3, 1, '', '', id, 1
from wp_comments,comment_tmp where wp_comments.comment_id=comment_tmp.id);

update wp_comments set comment_content = ( select c2 from comment_tmp where id=comment_id) where comment_id in (select id from comment_tmp);

DROP TABLE `comment_tmp`;

留言表wp_comments中,comment_parent字段对应所要回复的留言的comment_id;user_id对应做出评论的人(fivestone)在wp_users表中对应的用户id。SQL运行后,新生成的那些fivestone的留言不能显示avator,后来发现如果user_id不为0的话,系统是根据wp_users表中用户注册的email而不是留言里填的email取获取avator,更改用户信息后一切正常。

-----------------------------
TODO:

留言的分页显示功能需要测试,不过现在每篇文章也就十几条评论,一时还不需要。

因为用的是英文版,后台管理页面的汉字字号很小,看起来不舒服,回头要调一下。

自动发邮件功能还不能用。用Configure SMTP和Swift SMTP插件都搞不定。后者发测试信时报错:

Uncaught Error of type [swift_connection_exception] with message [Authentication failed using username 'reply' and password '**********']

或者(用gmail):

Uncaught Error of type [swift_connection_exception] with message [The SMTP connection failed to start [tls://smtp.gmail.com:465]: fsockopen returned Error Number 110 and Error String 'Connection timed out']

-----------------------------
现在使用的插件:

中文 WordPress 工具箱 1.2
Disable autosave 0.1
Peter's Random Anti-Spam 1.0.5
Simple Tags 1.5.8-2.7
Twitter Tools  1.0
Wordpress Thread Comment 1.4.9.2
WP-DownloadManager 1.31
Google XML Sitemaps 3.1.0.1

-----------------------------
停用wp-db-backup。用这个插件导出的SQL,导入到本地机器后。总是会出现一两个字的乱码(如图)。在文本编辑器里查看SQL文件,乱码就已经存在了。但是如果把这份SQL不做修改直接备份回原来的服务器,乱码的地方又恢复成正常的汉字...搞不懂。直接用phpMyAdmin里的导出功能,还没发现出现这样的问题。

Intense Debate

试用了一下Intense Debate。

Intense Debate,传说中的社会化blog评论体系。可以接管在各大blog引擎尤其是wordpress上建的blog的评论系统。并且把你在不同(也装了IntenseDebate的)blog上的留言都统一在你的IntenseDebate账户名下。思路很不错,如果大家都用的话应该是很华丽的web 3.0场面。而且前不久被wordpress的母公司Automattic收购,据说会在wp 2.7中添加相关的整合功能....

因为是在线的留言系统且和账户和blog地址对应,所以貌似不能把blog系统挪到本机做测试,只能在服务器上直接测。有些麻烦。

  • 在IntenseDebate系统中回复一条留言,新的留言在本地数据表中comment_parent字段的值为0,也就是并没有在本地保存留言之间的回复关系。一旦卸载了IntenseDebate,之前那些留言之间的层次关系完全消失。我原以为是由于自己用的wp 2.6.2不支持Thread Comment,然而在升级到wp 2.7-beta2后仍然如此。这是绝对不能接受的。
  • 原先就使用Thread Comment的blog,安装IntenseDebate后,并没有把原来blog评论间的回复关系也一并导入进来。
  • 原来的评论中以管理员身份回复的那些,最好能够导入到IntenseDebate用户名下,而不是和其它评论简单地放在一起。根据wp_comments中的user_id识别,应该不难。
  • 嵌入IntenseDebate的留言系统后,页面比原来慢了很多。
  • 不能在IntenseDebate中修改自己blog上的评论。如果用原有的wp系统或者直接在数据库中修改的话,IntenseDebate中会多出一条新的。这个和IntenseDebate的设计理念有关,不算bug。
  • 不能在IntenseDebate中删除自己留过的评论,哪怕是在自己blog中留下的。只能到相应的blog中,以admin的身份删除。这个本来也不是问题。只是我第一次安装blog.fivestone.cn后,写了几条留言做测试,之后在IntenseDebate中把这个blog删掉又重新安装了一次。地址相同却被IntenseDebate当做两个不同的blog,而我在第一个blog中的留言,就再也删不掉了。

于是又回到原先的wp 2.6.2,暂时不升级了。期间写了几句SQL,把以前直接在评论下面写的回复,改成Thread Comment的格式;也先不执行了,等2.7正式版以及相关themes稳定了再说。

发现网上那些介绍IntenseDebate,号称“绝佳互动式个人blog体验”的blog,没有一个用的是IntenseDebate。

-------------------
节日快乐 / wave / 原来的习惯

关于wordpress下的垃圾trackback

一个技术问题。Wordpress 2.5

整理wp的数据库,发现wp_comments表中,多了上万条trackback,都已经被标成spam,所以从没在前台出现过。

我没装Akismet之类的垃圾过滤插件,只用了Peter's Custom Anti-Spam在评论后面添加验证码,也没有禁止trackback访问,所以确实是不能阻止垃圾trackback的,于是很奇怪wp是在哪里过滤掉这些垃圾trackback的?

同时另一些非垃圾的如maozBanny的trackback却又能正常显示,就更困惑,系统是怎样识别是否垃圾trackback的?会否有错判行为?

另外有什么好的方法能阻止这些垃圾trackback出现?

谢。

update 2008-07-16
-----------------------------
好吧,我明白了,今天升级了wordpress,突然发现很久以前我在垃圾过滤规则中过滤了<strong>
而这些垃圾trackback全都含有粗体内容....个么还算不上是真正过滤了垃圾trackback
不过为啥老外都爱在垃圾留言中加粗呢?