为什么要迁移?

hexo需要懂一点技术,而且SEO不方便,且正好看到某云服务商的服务器有优惠,果断搭建一个WordPress,
WordPress相比hexo,运营起来更方便,而且。

迁移步骤

安装feed插件

首先要将hexo文章导出,这里使用了hexo-generator-feed,在 _config.yml 中配置:

1
2
3
4
5
6
7
feed:
type: rss2
path: rss.xml
limit: 0
hub:
content: true
template: wordpress-rss-tpl.xml

wordpress-rss-tpl.xml 为自定义的模板文件,内容如下:

查看代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wp="http://wordpress.org/export/1.2/">
<channel>
<wp:wxr_version>1.2</wp:wxr_version>
<title>{{ config.title }}</title>
<link>{{ url }}</link>
{% if icon %}
<image>
<url>{{ icon }}</url>
<title>{{ config.title }}</title>
<link>{{ url }}</link>
</image>
{% endif %}
<atom:link href="{{ feed_url | uriencode }}" rel="self" type="application/rss+xml"/>
{% if config.feed.hub %}<atom:link href="{{ config.feed.hub | uriencode }}" rel="hub"/>{% endif %}
<description>{{ config.description }}</description>
<pubDate>{% if posts.first().updated %}{{ posts.first().updated.toDate().toUTCString() }}{% else %}{{ posts.first().date.toDate().toUTCString() }}{% endif %}</pubDate>
<generator>http://hexo.io/</generator>
{% for post in posts.toArray() %}
<item>
<wp:post_type><![CDATA[post]]></wp:post_type>
<title>{{ post.title }}</title>
<link>{{ post.permalink | uriencode }}</link>
<guid>{{ post.permalink | uriencode }}</guid>
<pubDate>{{ post.date.toDate().toUTCString() }}</pubDate>
{% if post.description %}
<description>{{ post.description }}</description>
{% elif post.intro %}
<description>{{ post.intro }}</description>
{% elif post.excerpt %}
<description>{{ post.excerpt }}</description>
{% elif post.content %}
{% set short_content = post.content.substring(0, config.feed.content_limit) %}
{% if config.feed.content_limit_delim %}
{% set delim_pos = short_content.lastIndexOf(config.feed.content_limit_delim) %}
{% if delim_pos > -1 %}
<description>{{ short_content.substring(0, delim_pos) }}</description>
{% else %}
<description>{{ short_content }}</description>
{% endif %}
{% else %}
<description>{{ short_content }}</description>
{% endif %}
{% endif %}
{% if post.image %}
<enclosure url="{{ url + post.image | uriencode }}" type="image"/>
{% endif %}
{% if config.feed.content and post.content %}
<content:encoded><![CDATA[{{ post.content | noControlChars | safe }}]]></content:encoded>
{% endif %}
{% for category in post.categories.toArray() %}
<category domain="category" nicename="{{ category.name }}">{{ category.name }}</category>
{% endfor %}
{% for tag in post.tags.toArray() %}
<category domain="post_tag" nicename="{{ tag.name }}">{{ tag.name }}</category>
{% endfor %}
{% if post.comments %}
<comments>{{ post.permalink | uriencode }}#disqus_thread</comments>
{% endif %}
</item>
{% endfor %}
</channel>
</rss>

该模板解决了几个手工操作的步骤:

  1. 添加命名空间:xmlns:wp="http://wordpress.org/export/1.2/"
  2. 编辑atom.xml,在 <channel> 下一级添加:
    1
    <wp:wxr_version>1.2</wp:wxr_version>
  3. 每篇文章中添加文章类型
    1
    <wp:post_type><![CDATA[post]]></wp:post_type>

    (可以偷个懒,使用全局替换</title> -> </title><xxx>yyy</xxx>

  4. 修改发布时间
    <pubDate> -> <wp:post_date>,且时间格式为:YYYY-MM-DD HH:mm:ss

执行 hexo g,生成 public/rss.xml

这时,仍然有两个问题还未解决:

  • hexo文章里的图片是相对路径
  • 使用WordPress现有分类

修改图片链接

编辑 atom.xml ,全局修改图片链接:

"/img/loading.gif" data-src="/assets -> "/img/loading.gif" data-src="http://xxx.github.io/assets

我这里沿用了github pages链接

使用 WordPress标签 替换 hexo标签

由于我在hexo中没有分类,所以只说标签的导入,方法都差不多

  1. 全局修改标签的nicename属性为 WordPress 标签中的nicename 以”网站建设”为例,wordpress中,它的nicenamewebsite 替换:nicename="网站建设" -> nicename="website"
  2. 使用 工具 -> 导入 -> WordPress

其他问题

标签和分类相互切换

问题:如果你使用其他方法导入后,发现标签分类搞反了

可以直接使用WordPress自带工具:工具导入分类与标签转换器,将导入后的标签转换为分类

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注