WordPress 的 ActivityPub 插件

试用一下 WordPress 的 ActivityPub 插件(官网 / Github)。

主要功能,就是在 wordpress 上,建一个 Fediverse 账号,Mastodon / Pleroma / Misskey / Honk……的用户可以 follow 这个账号。新的 blog 文章发布时,这个账号会发一条嘟文,大家可以转发这条嘟文。followers 对这条嘟文的回复,会自动同步到 blog 文章的评论区。

就像我为这个 blog 建的 fedi 账号:@[email protected]

需要指出的是,并不存在 blog.fivest.one 这样一个 fediverse 实例。陌生人搜索这个账号,看不到任何历史嘟文;这个账号不能去 follow 别人,不能对别人说话,不能回复别人对自己嘟文的回复,也不能看到多少人转发点赞了自己的嘟文。——这些功能也许以后会有,但目前,这个插件所做的,只是在新 blog 发布的那一刻,向所有 follow 这个 id 的账号,push 一条嘟文。这条嘟文,在 blog 服务器上,并没有保存;而只存在于 follow 它的那些实例上,再被人转发到更多实例。

当 blog 的文章被删除时,这个插件也会通知所有的 followers,从他们的实例上删除对应的嘟文。但是就像我说过的,这个机制并不能把那些,被转发到其它实例的嘟文,也一起删除。所以,当你在 blog 按下发布按钮的一刹那,带着你所写的全部内容(或者摘要,可设置)的嘟文,就可能会永远飘在 fediverse 世界里,无从反悔。所以,写完这篇文章后,我还不确定自己是否会继续用这个插件……

所以我只是觉得这个插件运行的机制很有趣,向大家介绍一下而已。它仅仅是通过 ActivityPub 协议,和其它实例通信,而本身并没有创建实例。这个插件在 wordpress 的数据库里,甚至没有新增一个 table,而只是把 followers 的公钥,存到了 wp-options 里(我觉得这么折腾 options 表,有点过犹不及了……)。总而言之,这是个超级轻量化,在 wordpress 基础上,完全不产生多余开销的东西。

我之前吐槽过,目前所有的 Fediverse 引擎,都是用软件工程模块,匆匆拼出来的臃肿怪兽:开销巨大,数据结构不美观,依赖的技术模块未必有长久的生命力,安全性抗冲击性都很差……其实我很期待,一个单用户版的,完全没有 local 功能,支持 ActivityPub 协议的引擎。结构的简洁程度,和资源的开销,要比现在这些要好很多。从这个插件可见一斑(虽然这个插件和完整的个人版 fedi 实例,是完全两回事……


测试了一下。好像只有 follower 的回复(公开 or 私密)才会同步到 blog 的评论区;陌生人的不可以。但目前还没有做 follow 的审核通过机制。所以理论上是可以用这个功能发垃圾评论……

以及目前还没有让用户修改个人简介的功能,图片上那些简介,都是我在插件 templates/author-json.php 里手动改代码的。

[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
[download id=”8″]
== 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
[download id=”7″]
== 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.fivest.one/archives/664
Description: Disable RSS of posts or comments separately
Version: 0.8
Author: fivestone
download link
== 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居然被人注册掉了,这个是用来定义作者署名的啊呜呜呜。

blogger你妈妈喊你回家吃饭

[poll id=”1″]
近两年的若干新形势之一是亲爱的堂弟表妹们终于与时俱进开始纷纷通过MSN之类的链接翻到我这个blog,所幸老爸老妈目前距这项技术突破还很遥远。所以看官们,请管好嘴巴。
我不确定如果父母知道这里的存在后会发生什么——可能会很劲爆;但肯定之后我再写东西时会觉得很不爽,于是可能会屏蔽某些地域的ip(我一直在考虑要不要现在就这样做)。至少我相信他们掌握RSS订阅乃至翻墙术的时间会比访问我的blog更遥远。
是的,我和家里有矛盾。那种潜在的布朗运动的趋势和用爱和责任非要把你栓起来之间的矛盾。我小心翼翼地不让这种矛盾爆发出来。其实这个blog被他们知道了也没什么,除了些许他们不知道的小事譬如我去云南不是坐车而是骑了3000公里的山路摩托,以及几篇感情八卦外,我一时也想不出有什么是真的不能让他们看见的。但我也同样不能确定这里是否有什么东西会让矛盾砰地一下爆发开来。而爆发的结果,即使最后狠下心的是我,也是我不愿意看到的。我不要冒这个险。
我和家里,就像是一根橡皮绳的两端。距离远了父母会抓狂,距离近了我会抓狂,拉的越远,阻力越大。不巧我想要的和父母认可的距离之间的差距要大于多数正常人。于是过去7~10年内我一直在和这条绳子较劲。慢慢地,一点点拉扯,期望它能达到范性形变。
是的。人生就像风筝,飞得再高,也有棵线拴到地上。这说明你能飞多高取决于以下四点:

  • 风力,也就是人品;
  • 升力,你的自身结构;
  • 地面的水平高度;
  • 你能把那条线拉扯到多远。

这其实是每家都有的普遍矛盾,只是我所在的距离比大多数人更长而已。我旁观过各种长度,有根本不存在这种矛盾的、有自由放飞的、有如我一样在拉扯的、有被拉回去的、有彪悍地一往无前向外拉的、也有拉断了的。我也体验过各种距离和力度的组合。绳子已经比过去长一些了,至少老妈已经对我随时跳上火车习以为常而不再怨念孩子没卧铺会多难受。但还是要继续。也许你不相信,但至少到目前仍然是我在努力把绳子往外拉而不是我已到达彼岸他们在努力把我拉回去,所以目前的劣势一方仍然是我。
有压力的一方也是我。不要说什么珍惜父母还在,他们还能在的时间比我还能蹦的时间多多了。
这样子很累。以致于给家里通话这种事情都要仔细控制好频率。通话太多会造成惯性,乃至间隔超过两天对方就会不爽地打过来,乃至你出去玩几天电话和MSN上看不到就会抓狂打给你同学找人。我经历过的。
我已经习惯了在别人仰慕的时候,做深沉状很二地回答:选择任何方式都是有代价的。嗯,这就是代价之一。
顺便开个投票玩。订阅器里看不到的,请进来投票。为了装这个插件我壮着胆子把wordpress从2.7.1在线升级到了2.8.4,所幸无大恙。右边调用的分类函数大概是过时了,回头再查查。

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>”;

修改后的插件在这里提供下载:
[download id=”4″]
如果需要新的收藏按钮又自己懒得动手的,可以在留言里提出,我会酌情添加进去。