前言从WordPress转到Typecho已经几天了，终于算是把全站的布局，数据都调整好了。来整理一下整个过程吧，还是有不少坑的。为什么想转到Typecho呢，首先我自己也知道WordPress太臃肿了，其次，我一直没找到适合我的主题。偶然看到Hexo和Typecho的博客，那么简约，那么纯粹，一下就被击中了。其实我已经习惯了WordPress了，每次也就是进后台写写技术类的文章，然后再复制到公众号上发布。前些年还喜欢去找一下主题，自己手动修改一下，但WordPress的主题是真的难找，不是因为少，是因为太多了，而且大多都是花里胡哨，乱七八糟的。后来工作越来越忙，就索性从WordPress后台主题市场直接找了一款装上了，说白了，就是摆烂了。看到Handsome和Cuteen主题的博客时，竟让我又燃起了写博客的欲望。也有可能是因为这两个主题我最终决定开始转Typecho。准备工作先把WordPress整个站打包备份一下，然后单独将数据库备份出来。sql文件或sql.tar.zip之类的。搭建Typecho环境我是使用docker，我也推荐你们使用docker，Typecho的作者在DockerHub上有一直在更新他的镜像。搜索joyqi/typecho，你会看到有很tag，这里有第一坑，如果你后面要使用Handsome或Cuteen主题，还有一些其他的插件，就不要拉最新版本的镜像没，也就是不要使用1.3，找1.2.1的镜像来使用就可以了。我一开始就是拉取的nightly-php8.2-apache，不用说，这种最新的镜像妥妥的是1.3，一切都弄好了的时候我去部署Handsome主题，发现只要一启用，就一片空白了。按照说明文档里挨个排查了一遍，最后作者才问我Typecho是什么版本，我说1.3，他说还不兼容，咳，那我强烈建议你问题处理文档里把这一条加在最前面。我用的是1.2.1-php7.4-apache这个镜像，也推荐你们使用，下面是我的docker-compose.yml内容，你们可以参考。我在里面添加了phpMyAdmin的容器，因为后面要操作mysql进行数据导入，使用phpMyAdmin方便一点。services: typecho: image: joyqi/typecho:1.2.1-php7.4-apache restart: always ports: - 8585:80 #端口映射，把博客默认的80端口映射到8086端口 environment: TYPECHO_DB_HOST: typecho_db #默认值是localhost，docker部署时可以用服务名充当主机名 TYPECHO_DB_USER: leon TYPECHO_DB_PASSWORD: Plant@2025 TYPECHO_DB_DATABASE: typecho #所用的database volumes: - /etc/docker/typecho/data:/app/usr # /app/usr是typecho数据文件 depends_on: - typecho_db networks: - mynet phpmyadmin: image: phpmyadmin/phpmyadmin restart: always ports: - 8586:80 environment: PMA_HOST: typecho_db PMA_PORT: 3306 volumes: - ./zzz_custom.ini:/usr/local/etc/php/conf.d/zzz_custom.ini depends_on: - typecho_db networks: - mynet typecho_db: image: mysql:5.7 restart: always command: --default-authentication-plugin=mysql_native_password environment: MYSQL_DATABASE: typecho MYSQL_USER: leon MYSQL_PASSWORD: Plant@2025 MYSQL_ROOT_PASSWORD: Intergraph@2025 volumes: - /etc/docker/typecho/mysql:/var/lib/mysql # mysql数据库文件映射 networks: - mynet networks: mynet:这里面的三个容器是内联，只有typecho向外暴露了端口，phpMyAdmin也是临时暴露一下，后面为了安全还是会关掉，或者在反代软件里关了这个端口的反代也可以。这里记住你的rootpassword，后面进phpMyAdmin里操作数据库使用root账户，而且还有可能会需要到mysql容器中设置某些参数。这里有第二个坑，我在docker-compose文件里已经设置好了，phpMyAdmin容器里添加了一个文件映射，你需要在外面创建一个zzz_custom.ini文件，里面的内容如下，这是一个php环境的自定义配置，目的是为了改变phpMyAdmin允许上传和导入的sql文件的大小限制，默认是2M，太小了，我改到了100M。为什么要在这个文件的前面加上zzz，那是因为在php环境里加载配置文件的时候会按照首字母顺序，后加载的会覆盖之前加载的，所以要确保这个自定义配置在最后加载。upload_max_filesize = 100M post_max_size = 100M反向代理和证书设置我的服务器上是使用的NPM做反向代理，把Typecho和phpMyAdmin的端口映射出来，Typecho可以先临时挂一个二级域名或者你其他不用的域名，因为后面一切设置好以后会改回你WordPress站的域名。phpMyAdmin可以临时挂到一个二级域名上。方便登陆去操作数据库。导入WordPress数据去Typecho官网说明文档中找到Wordpresstotypecho插件，解压的文件夹上传到plugins目录。然后用root账户登陆到phpMyAdmin，创建一个新的数据库，名字就叫wordpress之类的，注意字符集的选择，务必选择utf8mb4_general_ci。然后选择你刚创建的db，选择导入，上传和导入你之前WordPress备份的sql文件。到Typecho后台启用wordpresstotypecho插件，在设置里配置好wordpress的连接信息。保存后就可以去点进这个软件执行导入了。如果遇到database query error，就需要去把mysql环境里的严格模式关闭。如果你是docker环境，就需要先使用下面命令进入docker。然后再执行下面语句去设置sql_mode，由于我们创建的是内联容器，所以还需要指定一下host。如果你不是内联容器的方式，就不需要使用-h了。按照提示输入你之前设置的root账户密码，输入SET GLOBAL sql_mode='';即可。你也可以通过select @@GLOBAL.sql_mode;来查询当前的sql_mode值。mysql -h typecho_db -u root -p SET GLOBAL sql_mode=''; exit;一般是修改完这个地方能成功导入了。1.3的Typecho默认这个地方已经改成了空。还原文章图片，附件你之前备份的WordPress网站解压出来，把uploads里的所有内容上传到Typecho的usr/uploads，我这目录是已经映射出来了的，所以你找到对应的uploads文件夹就行了。注意保持目录结构不变然后到在phpMyAdmin中，选中typecho数据库，在sql里执行下面语句来更新一下图片和附件的绝对路径update typecho\_contents set text=replace(text,'wp-content/uploads', 'usr/uploads')新网站设置导入数据库文件后，原来 WordPress 站点的文章、分类、标签、评论都完美导入到 Typecho 站点了，但网站标题、副标题等都没有，此时就需要在【设置】→【基本】中进行相应的设置。另外域名的解析也可以切换到你的Typecho环境了。设置永久链接启用地址重写，设置永久链接，保持和你之前在WordPress那边一致的拼接方式。索引重建导入WordPress数据后，搜索栏里没有任何内容，我们需要重构一下索引，像我使用的Handsome主题插件里有重构索引的功能，我就直接使用了，你可以去搜索一下相关的插件也行。原有文章格式更新使用Typecho编辑wordpress导过来的文章时会弹出这个提醒“这篇文章不是由 Markdown 语法创建的, 继续使用 Markdown 编辑它吗?”出现这个问题有可能是，数据是从其他地方导过来的，文章正文开头缺乏一个特殊的语法内容： 。这个语法内容决定了该篇文章是否采用 Markdown 语法进行解析。​解决问题 ：在未开启 Markdown 语法解析的文章正文开头都加入该语法内容：update typecho_contents set text=concat(' ', TEXT);后记关于Handsome主题的一些设置，Typecho里的一些必要的插件安装等有空会另起一篇文章来介绍一下。