当你想修改hexo博客的永久链接(permalink
),又不想让旧链接失效,可以考虑下这种方法
up主在 2021-10-01
这天修改了永久链接的规则,为了不影响之前已发布的文章链接,我们通过扩展API给以前的文档生成两个路由,让之前的文章同时支持两种链接:
- befor:
:year-:month-:day-:title
- after:
:year-:month-:day-:title
and:title
官方已经给出了插件的使用防范:https://hexo.io/zh-cn/api/generator#%E7%94%9F%E6%88%90%E6%89%80%E6%9C%89%E6%96%87%E7%AB%A0,
但是,按官方提供的demo修改完之后,发现sidebar不出现了,导致布局乱套了,不但侧边栏(sidebar)没了,上一篇/下一篇的按钮也没了
通过查看正常和不正常的页面的源代码(浏览器右键->源码->搜索”sidebar”,对比两个页面),发现:
themes/ButterflyOut/layout/includes/head/config_site.pug:16
– isSidebar 为 true 时,侧边栏(TOC)才会出现;
查看源码得知:
themes/ButterflyOut/layout/includes/head/config_site.pug:8
– 由于 is_post 返回false,导致 isSiderBar = false
is_post
从 hexo
源码看,
node_modules/hexo/lib/plugins/helper/index.js:34
– is_post 其实就是 is.post() 方法返回的
node_modules/hexo/lib/plugins/helper/is.js:27
– is.post() 方法里面就一个属性 page.__post
node_modules/hexo/lib/plugins/generator/post.js:23
– 最终发现是这里赋值的,并且这里上下文的方法不就是跟我们这个插件所覆盖的功能嘛,我们可以模仿这里的写法来优化的插件
code show
在hexo项目根目录下新建脚本:scripts/redefine_permalink.js
(脚本名字随意)
1 |
// 2021-10-15,up主修改了永久链接的规则,为了不影响之前已发布的文章链接,我们这里修改下生成文章的脚本,让之前的文章同时支持两种链接: |
Q&A
-
会不会影响到评论插件
评论插件是根据 title 来生成issue的,所以不会影响评论