WordPress:所以爱会消失对不对

用 WordPress 写博客已经一年了,从最开始感叹 WordPress 的功能强大到现在抱怨各种小问题,感觉 WordPress 似乎不适合我。正好最近服务器该续费了,就考虑着换个平台。

  • 慢,对服务器要求高
  • 对个人博客来说太重了,难以定制化
  • 插件很多很丰富,另一方面也不可避免存在各种冲突
  • 缺乏版本控制

这次调研了一下 Typecho、Hexo、Hugo、Gatsby 几个平台,最后的选择是 Hexo。

去年搭博客的时候也考虑过 Hexo,当时第一眼觉得 Hexo 过于简陋,而且那时候对 Git 的使用还不熟悉,所以就放弃了。但现在用了 WordPress 之后,觉得 Hexo 可能才是最适合我的。

  • 原生支持 Markdown
  • 静态页面,不需要额外服务器
  • 每个细节可高度定制化
  • 轻,可以享受尽在掌握的感觉

向 WordPress 告别

如果你有一个不错的服务器,或是对 Git 不熟悉、更偏爱成熟的产品,那么 WordPress 还是一个很不错的选择,以下的一点点经验可能对你有用。

使用的主题

  • Adams 单栏,白底黑字,最简洁

  • Apex 双栏,顶部有个艺术字体 logo,使用时间最长

  • GeneratePress 双栏,比较常规

  • Twenty Fifteen 双栏,来自 WordPress 官方,也很喜欢

使用的插件

  • Autoptimize 通过优化 CSS、JS、图像、Google 字体等来加速网站,感觉优化效果一般。

  • BackWPup 可以备份数据库、插件等等,同时自动上传到 Dropbox 网盘上(Dropbox 有 2GB 的免费空间),推荐。虽然 WordPress 的安全性比较高,但网站备份还是很重要的。备份的数据暂时没用上,但看着就很安心。

  • BCD Upcoming Posts 可以在侧栏添加一个小部件,显示在草稿栏中的文章标题,用来做一个预告。

  • Featured Image from URL | FIFU 使文章的特色图片(展示在首页的缩略图)支持图床外链。

  • Jetpack WordPress 官方出品的插件,集成了速度优化、访客统计、社交网络分享、攻击保护等等功能,主体免费,有氪金选项。但是比较臃肿,而且服务器在国外,可能会拖慢速度。

  • Post Views Counter 显示文章、页面的浏览次数。

  • Space Lover 在中英文间添加空格。

  • Table of Contents Plus 自动创建文章目录。

  • WP Editor.md “或许这是一个 WordPress 中最好,最完美的 Markdown 编辑器” 支持实时预览,支持语法高亮,支持 emoji,支持 LaTeX,支持 sm.ms 图床,开发者反馈非常及时。

  • WP Statistics 更专业的统计分析插件,详细地记录了访客 IP、浏览器等信息,小博客还是没必要了。

  • WP Super Cache 一般来说 WordPress 每次访问都需要动态查询、生成,这个插件能够预先生成静态文件,这样就可以减轻服务器负担,实测对速度优化帮助比较大。

一些经验

  • 给网站测速的两个工具: https://developers.google.com/speed/pagespeed/insights/ https://gtmetrix.com/

  • 虽然 WordPress 内置了比较完善的媒体管理库,但是仍然推荐写博客时使用图床外链,一方面能加速,把图片资源分离开;另一方面可迁移性,遇到我这种想给博客搬家的,图片资源直接可以继续使用了。

  • 关于 WordPress 的特色图片,有的情况下会在文章内页多显示一次,临时解决办法是编辑主题的content.php文件,注释掉featured_image()函数

  • 一些用 Markdown 解决不了的格式,可以直接用 HTML 写。比如插入图片的时候加入标注,或者让表格居中。

保存快照

数据都导出备份后,如果对这个博客还留有一丝怀念,想多截几张图,我找到了一个不错的工具,能把整个网站爬下来,包括源码内的 css、静态文件之类的。SiteCopy,很优雅,感谢作者。

安装依赖的时候注意 functools 已经集成在 Python3 里面了,报错可以直接忽略。

博客迁移

从 WordPress 到 Hexo 的迁移教程可以参考官方的hexo-migrator-wordpress插件,文档:https://hexo.io/zh-cn/docs/migration。

当然,这个插件并不能完美地实现 WordPress->Hexo 的数据转换,很多内容还需要手动检查。

如果碰到表格格式转换的问题,可以试试这个小工具:https://tableconvert.com/

我的 WordPress 服务器在 2020 年 11 月 21 日晚正式关闭。

初识 Hexo

参考文档

官方文档:写得比较烂。

轻松使用 Hexo 建站:非常棒,从安装到主题定制,推荐。

经常使用的命令:

hexo new "postName" #新建文章
hexo new page "pageName" #新建页面
hexo generate #生成静态页面至 public 目录
hexo server #开启预览访问端口(默认端口 4000,'ctrl + c'关闭 server)
hexo deploy #将 deploy 目录部署到 GitHub
hexo clean #清除 database 和 public 文件夹

正在使用的插件

  • 自动刷新 找了个插件 hexo-browsersync 插件,能让浏览器实时响应文件更改(包括文章、主题修改)。

    现在的习惯是命令行hexo clean && hexo g && hexo s,然后浏览器和 Vs Code 分屏,所见即所得,写完之后hexo d传上云端,非常快乐。

  • 中英文空格

    如果你跟我一样,每次看到网页上的中文字和英文、数字、符号挤在一块,就会坐立难安,忍不住想在它们之间加个空格。这个外挂(支援 Chrome 和 Firefox)正是你在网路世界走跳所需要的东西,它会自动替你在网页中所有的中文字和半形的英文、数字、符号之间插入空白。汉学家称这个空白字元为「盘古之白」,因为它劈开了全形字和半形字之间的混沌。另有研究显示,打字的时候不喜欢在中文和英文之间加空格的人,感情路都走得很辛苦,有七成的比例会在 34 岁的时候跟自己不爱的人结婚,而其余三成的人最后只能把遗产留给自己的猫。毕竟爱情跟书写都需要适时地留白。与大家共勉之。 https://github.com/vinta/pangu.js

    在 WordPress 上使用的是 Space Lover,在 Hexo 上尝试了"hexo-pangu-spacing"、"hexo-filter-auto-spacing“两个插件,在我这里好像兼容性都一般。

    最后使用的是 VS Code 上的 Pangu-Markdown 插件,也算不错的解决方案。

  • LaTeX 因为 Markdown 和 LaTeX 的语法是有冲突的,在 WordPress 中使用的 MD 插件能较好地兼容 LaTeX 语法,但现在使用的主题上没有适配这个功能。

    更换渲染工具、修复转义问题啥的,本已做好大战三百回合的准备,没想到五分钟就搞定了。非常感谢这篇博客:让 Hexo 支持 LaTeX 公式

    注意想要打“$”符号本身的时候,前面要加个“\\”防止转义。

  • 代码高亮 选择的是 hexo-prism-plugin 插件,但是比较奇怪,这个插件会把花括号解析为{},这个问题的解决方案可以参考 这篇博客

    node_modules/hexo_prism_plugin/src/index.js文件中的const map添加两行:

    const map = {
      ''': '\'',
      '&': '&',
      '>': '>',
      '&lt;': '<',
      '&quot;': '"',
      '&#123;': '{',
      '&#125;': '}'
    };
    
  • 评论 关于 Hexo 上的评论系统,网友们给了很多横评,一开始选择的是 来必力,墙内可访问,而且有后台可以管理。虽然不支持匿名,提高了点门槛,不过倒是可以减少垃圾评论。一个缺点是不支持评论导入和导出,所以就只好告别原来 WordPress 上的评论啦。

    但是使用了几天,发现日常访问实在是太慢了,无奈换了个平台。现在使用的是 Valine,支持匿名,简洁到没有后台,删除和管理评论直接操作数据库,但对垃圾评论的管理好像比较麻烦。没学过前端的我折腾了半天,终于把评论植入进来了。由于是直接操作数据库,所以努力了一下,成功把原来的评论也导入进来了。

  • 延迟加载 找到一个 hexo-lazyload-image 插件,结果用了之后比原来加载还慢,不懂,下次研究研究。

  • 访客记数 使用的是 不蒜子 插件,和评论系统差不多,都是“一行脚本+一行标签”搞定。但是存在一个bug:

    safari(包括移动端的safari)浏览器页面pv统计问题,如下,因为Safari浏览器referer在文章页面时也上送的域名(而单个页面的pv统计是根据页面路径,即上送的referer),所以此时页面的pv返回的站点的pv值。暂时没解决方法,可自行搜索解决方案构造正确的referer值。对于此问题可以换个浏览器看哇,比如Chrome,哈哈。 来自:https://zzzeros.gitlab.io/blog/posts/89986481/