博客装修记:评论回复,OpenGraph

warning: 这篇文章距离上次修改已过214天,其中的内容可能已经有所变动。

其实有修补博客程序之后略微做记录的习惯,但是如果每次都单独发文,就显得有些杂乱了,因此凑一批再说。不过这次嘛...OpenGraph支持已经足够单独当一批了,因此一起发出来。

1. 前言

闲下来的时候就会没事干,没事干就会折腾这个博客。

总的来说,OpenGraph是功能,评论回复是外观,别的地方暂时好像没有什么能动的,再加上过多的PHP动作比较吃机器性能,所以还是少动一点为妙。

2. 评论回复

应该说,指的是评论条目的回复按钮,也就是下面红色的那个:

如图所示,Typecho其实支持评论回复功能,但是主题并未显示,甚至用F12检查都能看见这个回复按钮,但是在waxy-main.css中,被人为设置为了不显示。

/* 在1173行 */
.about-author .comment-reply {display:none;}

至于为什么主题作者需要设置为不显示,笔者并不清楚,但一个可能的猜测是:回复的评论其实是缩进进去的,如果追加评论层数过深,会导致缩进深度过大,导致展示效果不佳。实测在回复到5层左右的时候,最后一层在手机端就会被挤到最右侧,成了一长条,很难阅读。

我不确定这个功能是不是在旧版Typecho年代传下来的,就笔者目前用的这个版本而言,他支持在后台设置最大评论深度(目前设置为3层),达到这个深度,就不再输出回复按钮了。此外,这行CSS往上几行,有一个控制评论回复缩进深度的选项:

.about-author .comment-list .comment-list {
    padding-left: 200px;
}

只需要适当缩小这个值(目前为80px),再加上后台限制层数,就可以放心地取消掉主题中对于回复按钮的屏蔽。

3. OpenGraph

在把网页分享到QQ,Twitter等社交平台时,有时候会看到很好看的分享卡片:

比如这样的比如这样的

这其实就是OpenGraph规范(下面简称OG)的功劳,他提供了一种通用的元数据表示方式,让遵守此规范的社交平台,能快速获取站点信息,文章信息,从而生成适合这个平台的分享卡片。比如上面那篇博文对应的OG标签如下:

<meta property="og:locale" content="zh_CN" />
<meta property="og:url" content="https://blog.mfwt.top/index.php/archives/857/" />
<meta property="og:type" content="article" />
<meta property="og:title" content="如何正确使用一台(多波段)收音机 - 枫林灯语" />
<meta property="og:description" content="上次介绍了关于桦加沙来之前的准备..." />
<meta property="og:image" content="http://blog.mfwt.top/usr/uploads/img/favicon.big.png" />
<meta property="og:logo" content="http://blog.mfwt.top/usr/uploads/img/favicon.big.png" />

要生成这样的内容,用插件是一个很好的选择。站点上本来就有一个用来生成JSON-LD的插件,因此只需要在这个上面修改就行了。

打开插件代码,先准备数据:


$siteName = $option -> title;
$archiveTitle = $t -> getArchiveTitle() ?? $siteName;
$archiveTitle = ($archiveTitle == $siteName) ? $archiveTitle : $archiveTitle.' - '.$siteName;
$articleCreateTime = date('Y-m-d\TH:i:sP', $t -> created);
$articleModifiedTime = date('Y-m-d\TH:i:sP', $t -> modified);
$description = $t -> getDescription();
$url = $t -> getArchiveUrl();
$siteImage = '此处硬编码了一个图像地址';
$ogData = [
    'site_name' => $siteName,
    'title' => $archiveTitle,
    'description' => $description,
    'url' => $url,
    'logo' => $siteImage,
    'image' => $siteImage,
    'type' => 'website',
    'locale' => 'zh_CN'
];

数组中的字段,在下面的代码里是可以覆写和追加的。原来生成JSON-LD的时候,已经有判断当前页面类型的操作,因此可以直接复用原来的代码,在判断完页面类型后,覆写部分字段,就可以动态生成所需要的OG数据了:

// 文章页,修改类型为文章
// 然后加上文章专有的字段
$ogData['type'] = 'article';
$ogData['article:author'] = $authorName;
$ogData['article:published_time'] = $articleCreateTime;
$ogData['article:modified_time'] = $articleModifiedTime;

最后,输出:

// 输出OG标签
foreach($ogData as $k => $v) {
    if($v == '') {
        // 空白字段,跳过
        continue;
    }
    echo("<meta property=\"og:{$k}\" content=\"{$v}\">\n");
}

就可以在页面上得到动态的OG标签了。

4. 写在最后

只是简单修补了一下这个博客,让他能更好地运行而已。

(完)


木头箱子脆脆,但是这样正好

如无特殊声明,本站内容遵循 CC BY-NC-SA 4.0 协议

转载请注明出处并保留作者信息,谢谢!

本站由 搬瓦工VPS 强力驱动

none
最后修改于:2025年12月09日 23:09

添加新评论

提醒:『评论回复邮件提醒』功能正在测试中
评论后,如果站长有回复,会有邮件通知