让WordPress网站能够从Mastodon和Misskey上进行关注,尝试使用ActivityPub插件
对于以下内容,只需要提供一个中文选项:
引入
过去,在某个社交网络平台上有一只蓝鸟,人们聚集在那里。然而,最近的混乱情况让人们开始散去,转向了其他社交网络。
有些人选择了加入Mastodon社区,而有些人则选择了加入Misskey社区。他们一起进入了被称为Fediverse的宇宙。尽管它们位于不同的星球(服务器),但它们具备相互通信的能力。这是因为它们都实施了一种称为ActivityPub的共同协议(通信规约)。
被绑住的不仅仅是社交媒体。
我在之前提到Mastodon和Misskey等服务器是通过共同的协议进行通信的。通过实现这个协议,即使是被广义地称为“SNS”之外的东西也可以连接在一起。在其中,最近引起了一些关注的是博客系统的“WordPress”。没错,WordPress和Mastodon是可以互相关注的。
让我们看一下证据,就是我在misskey.design上的账户 (@monaco_koukoku@misskey.design) 的关注列表。

账户名为 @monaco@monaco.every-little.com 。@符号后面的部分是服务器的域名(为了能够在服务器之间相互关注而给账户加上域名以唯一区分账户)。这个域名无非就是我的WordPress网站的域名。
点击此帐户后,将从misskey.design的页面显示以下方式的笔记(发布)。乍一看,看起来没有特别不自然的感觉。

这本笔记的实体是在WordPress上发布的文章。换句话说,关注这个账户的Mastodon、Misskey等账户可以在时间线上看到在WordPress上发布的最新文章信息。例如,我个人参加同人志即卖会(设立摊位),通过在网站上发布活动信息,可以通知Mastodon和Misskey等用户。
本文将讨论如何使WordPress能够从Mastodon、Misskey等各个服务器上进行关注。鉴于这个领域变化很快,所以随着时间的推移,本文可能不再适用。请您提前理解。
验证环境
-
- WordPress v6.3.2
ActivityPubプラグイン v1.0.10
(オプション)NodeInfoプラグイン v2.2.0
另外,假设WordPress网站符合以下条件。
-
- 独自ドメイン(サブドメイン可)が設定されていること
-
- HTTPSが有効化されていること(Let’s Encrypt可)
-
- WordPressがルートディレクトリにセットアップされていること(https://example.com/ のようなドメイン名だけのアドレスでWordPressサイトのトップページにアクセスできる)
この条件については回避できなくもないようですが、この記事では省略します
准备
在WordPress中安装ActivityPub插件。点击管理界面上的“插件”→“新建”按钮,输入ActivityPub到搜索框中,然后安装这个粉色图标的插件。安装完成后不要忘记启用该插件。

最简单的设置
这就是以上的全部内容。
帐户名将会成为WordPress的用户名。从外部来看,帐户名将加上域名变为@(WordPress的用户名)@(域名)。如果您在Mastodon的搜索框中输入这个字符串,我相信网站应该会被找到。
然而,默认设置存在一些问题,所以在告诉其他人账户名之前,我们应该先好好进行设置。
再做一些更完善的设置
打开WordPress管理界面,从ActivityPub插件的设置页面进行操作。
帐户类型 hù
我认为在企业和团体中,可能会有多人共同管理WordPress网站的情况。为了满足这种情况,ActivityPub插件可以公开以下两种类型的账户。
-
- WordPressユーザー個人のアカウント
WordPressのユーザー名がアカウント名になる(デフォルトで有効化されるのはこちら)
フォロワーのタイムラインでは各個人が投稿した記事のみが見える
サイト全体のアカウント
好きな文字列をアカウント名にできる(WordPressユーザー名と重複しないこと)
フォロワーのタイムラインでは全ユーザーが投稿した記事が見える
可以同时启用它们,也可以只启用其中一个。在「设置」选项卡中的「个人资料」中,勾选「启用投稿者」则启用前者,勾选「启用博客」则启用后者。

如果您是个人运营网站,两个账户实质上是相同的。在这种情况下,我认为只使用后者更容易。取消“启用发布者”选项,勾选“启用博客”选项。然后,在“更改博客配置文件ID”中输入您想要的账户名称。
然而,如果已经开始运营并且有人追随的账户改变了账户名,那么关注者将无法找到它。在向他人宣传之前,请确保确定账户名。
从现在开始,我们将以整个网站账户为前提进行说明。
在时间线上展示的内容设置
当您将浏览器屏幕向下滚动时,您会看到一个名为”活动”的选项。

在「投稿内容」中,您可以自定义投稿的内容。以我的情况为例,我选择了”自定义”,并输入了以下内容。
<strong>[ap_title]</strong>
[ap_excerpt]
[ap_hashtags]
<a href="[ap_permalink]">[ap_permalink]</a>
你可以通过点击“查看ActivityPub模板标签列表”链接来确认标签的含义,但你可能已经大致了解了。通过进行这些设定,以下页面将会像上面的图片所示,以一种类似的方式显示出来。

在图片数量方面,最好将其设置为较大的值。默认情况下,默认值为“3”,但实际上有时只会显示一张图片。我认为保留一些余地,设为“10”左右会更好。
头像图片
在设置主题自定义界面中,可以使用“站点图标”作为帐户的头像图像。请准备好512×512像素的PNG格式等图标图像。相同的图像也会自动设置为WordPress网站的Favicon图标。

确认是否按照预期显示
一旦完成设置后,我们来确认是否生成了预期的帖子内容。但是,只有新发布的文章才会在关注者的时间线上发布(类似于邮件杂志的方式)。为了不破坏网站,我们不宜多次进行测试发布,我将解释如何查看现有文章的显示方式。
确认发布内容作为ActivityPub协议的一部分
如果将URL输入到Mastodon的搜索框中,确实可以确认显示,但一旦服务器缓存了帖子,即使修改或更改了内容,也无法反映出来。因此,最好先查看作为协议的发布内容。
您可以从以下URL获取由我在 monaco.every-little.com 域名上发表的文章转换而来的笔记信息。
https://monaco.every-little.com/wp-json/activitypub/1.0/users/0/outbox的内容进行释义。
打开此URL,会返回JSON格式的数据。如果要在浏览器中显示,可以使用Chrome扩展程序中的“JSON Formatter”等工具对其进行美化和格式整理。在Firefox中,默认会以整齐的形式显示,非常方便。
在 JSON 对象的 orderedItems 中,包含了每个帖子的信息。0 号帖子是最新的,1 号帖子是次新的,依此类推。具体细节请参考 ActivityPub 的规范文档,但在这里,只需要检查大致符合下面示意图中所示部分(尤其是图像和正文内容)即可。

如果存在与预期不符的情况, 可以通过更改图片数量设定或者更改”投稿内容”的设定来重新加载URL。
关于所展示的图像
文章中指定的特色图片将被附加为第一张图片,并在此后附加其他贴在文章中的图片。如果存在多张相同的图片(包括特色图片和正文图片),只有第一张图片会显示在笔记中。
关于哈希标签的问题
將標籤指定為記事,即將其作為哈希標籤添加到筆記中。

关于从[ap_excerpt]标签中展开的摘要
若在文章的”输入摘要”栏中有输入内容,则将使用输入的内容作为摘要;如果没有输入内容,则会自动生成摘要。但是需要注意的是,WordPress的自动生成摘要功能对多语言支持不太稳定(例如在使用日语时,若将上限设为”50个字”,有时会被限制在”50个字符”)。因此,建议手动填写”摘要”的内容。

我会实际跟进并确认一下。
如果能够成功调整,您可以从您的Mastodon或Misskey账号(除了主账号之外,也可以为测试而创建)实际上关注WordPress网站,并尝试在WordPress上发布一些文章。当文章状态变为”公开”时,就会产生一条笔记并在时间线上传送。
对于一次发布的文章所做的更改将不会反映在Fediverse的笔记中。另外,要删除笔记,需要将文章发送到垃圾箱中(重新变为草稿似乎不会使它消失)。
进一步改进(面向高级用户)
这大致上勉强满足要求了,但仔细看还有一些关于资料和服务器信息的地方可以稍作改进,所以我会再加把劲。
建议禁用ActivityPub插件的自动更新,以避免对PHP代码进行直接更改时自动回滚更改部分。
表明名字和个人简介栏
如果以整个网站作为帐户运营,那么输入在WordPress网站名称和捕捉语句中的内容(参见下图)将成为在Fediverse上显示的用户昵称和个人资料简介。

由于宣传口号通常都是用一句话来表达的,所以在个人简介栏中写入的内容太短了。就显示名称而言,有时候我们可能希望在网站名称后面加上”用于通知”之类的说明。由于(截至撰写时)插件没有提供这些自定义功能,因此若想进行更改,我们就必须修改插件的代码。
在ActivityPub的插件文件编辑器中,打开activitypub/includes/model/class-blog-user.php文件,并对图像中指示的部分进行修改。

public function get_summary() {
$home_url_escaped = esc_url( home_url( '/' ) );
return \wpautop(
\wp_kses(
\get_bloginfo( 'description' ) . ' / Webサイト <a href="' . $home_url_escaped . '">' . $home_url_escaped . '</a> の新着記事を配信します / お問い合わせは <a href="https://misskey.design/@monaco_koukoku">@monaco_koukoku@misskey.design</a> まで',
'default'
)
);
}
\get_bloginfo( ‘name’ ) 是网站名称,\get_bloginfo( ‘description’ ) 是口号。可以保留原始内容,也可以自由地编写字符而不使用这些函数。
更改内容可能不会立即在参考账户信息的服务器上反映出来,可能需要大约一天的时间。请耐心等待。
服务器信息
可能性は一つだけ提供しますが、以下は中国語的表达方式:
Mastodon用户可能没有特别注意到,但在运行Misskey、Firefish等服务器的情况下,时间线和个别笔记的显示中会显示该用户所属服务器的信息,如用户名称下方或旁边。

然而,在WordPress的ActivityPub插件中,目前尚未提供此信息,这导致在Misskey等平台上,服务器名称会显示为空白。

在这里,我们将进行修改以避免这个问题。
在WordPress中安装并激活NodeInfo插件(建议禁用自动更新)。
在NodeInfo插件的文件编辑器中打开nodeinfo/includes/class-nodeinfo.php文件,并添加如下所示的2行代码。

$metadata['nodeName'] = get_bloginfo('name');
$metadata['nodeDescription'] = get_bloginfo('description');
据说在进行更改后,反映这些变动可能需要几天时间。如果一切顺利,WordPress网站名称应该能够作为服务器名称显示出来。

其他
我想确认谁关注了我。
您可以通过ActivityPub插件的设置界面中的“关注者”选项卡来确认。

我想從WordPress那邊關注其他用戶。
据说安装「Friends」插件会很好。(在插件的设置页面上写着)
个人未经验证(未使用),所以不详细说明了。
最后通知
2023年11月11日(星期六)将参加在冒头图片中也有出现的“东京文学自由市场37”,我会在那里开设档口。
我以街上引起注意的马尔富克门牌和基督门牌等物作为书籍的题材。附近居民,请多关照。
以下是网页目录。
关于其他活动参与信息,我们将在您即将临近时通过 @monaco@monaco.every-little.com 进行通知。谢谢。