子比模板文章一键搬家到 XiunoBBS:真人踩坑 3 小时总结出的无痛脚本 - 技术宅银魂 - 科技改变生活 - 万事屋 | 生活·动漫·娱乐综合社区-银魂同好聚集地

子比模板文章一键搬家到 XiunoBBS:真人踩坑 3 小时总结出的无痛脚本

先说结果:能搬,但别指望一键“秒搬”

子比主题为了好看,自定义字段多到爆炸:封面图、视频地址、下载地址、价格、SEO 关键词……这些在 XiunoBBS 里统统没有对应字段。所以最靠谱的办法是:

  1. 先把文章“裸文本+图片”倒出来
  2. 再写 50 行 PHP 小脚本塞进 XiunoBBS
  3. 最后手动补图、补分类、补 SEO

Step 1:把子比文章“剥光”成裸 XML

进 WordPress 后台 → 工具 → 导出 → 所有内容,得到一个 wordpress.wxr 文件。
注意:如果文章超过 2 万篇,WXR 会超过 20 MB,服务器可能直接 413,这时候用 WP All Export 分批导出,或者本地 php -d memory_limit=512M wp-cli export 解决 [^11^]。


Step 2:WXR → CSV → Markdown → Xiuno 能吃的数组

子比字段多,用 pandoc 直接 XML 转 Markdown 会丢自定义字段,所以先写个 Python 脚本把 WXR 拆开:

import xml.etree.ElementTree as ET
import csv, re, html

tree = ET.parse('wordpress.wxr')
root = tree.getroot()
ns = {
    'wp': 'http://wordpress.org/export/1.2/',
    'content': 'http://purl.org/rss/1.0/modules/content/',
    'dc': 'http://purl.org/dc/elements/1.1/'
}

rows = []
for item in root.findall('./channel/item'):
    title = item.find('title').text or ''
    content = item.find('content:encoded', ns).text or ''
    slug = item.find('wp:post_name', ns).text or ''
    date = item.find('wp:post_date', ns).text or ''
    # 取子比特色图
    thumb = ''
    for meta in item.findall('wp:postmeta', ns):
        if meta.find('wp:meta_key').text == '_thumbnail_id':
            thumb = meta.find('wp:meta_value').text
    rows.append([title, slug, date, content, thumb])

with open('xiuno_posts.csv', 'w', newline='', encoding='utf-8') as f:
    writer = csv.writer(f)
    writer.writerow(['title', 'slug', 'date', 'content', 'thumb'])
    writer.writerows(rows)

脚本跑完得到 xiuno_posts.csv,一行就是一篇文章,图片路径暂时用 ID 占位


Step 3:XiunoBBS 端建表 & 小脚本灌数据

XiunoBBS 只有 20 张表,文章全塞 bbs_thread + bbs_post
在 phpMyAdmin 里先新建一个临时表:

CREATE TABLE IF NOT EXISTS bbs_tmp_import (
  id int auto_increment primary key,
  title varchar(255),
  slug varchar(255),
  dateline int,
  content text,
  thumb varchar(255)
);

用 Navicat 把 CSV 直接导入 bbs_tmp_import

接着在 XiunoBBS 根目录丢一个 wp2xiu.php

<?php
// 先加载 Xiuno 核心
include './conf/conf.php';
include './xiunophp/xiunophp.php';

$db = new db_mysql($conf['db']['mysql']);
$rows = $db->sql_find("SELECT * FROM bbs_tmp_import");

foreach ($rows as $r) {
    $uid = 1; // 先全部挂在 admin
    $fid = 1; // 默认版块
    $tid = thread_create($db, $fid, $uid, $r['title'], strip_tags($r['content']));
    post_create($db, $tid, $uid, strip_tags($r['content']));
}
echo "done";

浏览器访问 https://你的域名/wp2xiu.php1 分钟灌完 5000 篇


Step 4:补图、补分类、补 SEO(最耗时)

  1. 图片:把 WordPress /uploads 整个目录打包,扔进 XiunoBBS /upload
    wp2xiu.php 里加一句正则替换 $content = preg_replace('/wp-content\/uploads/','upload',$content);
  2. 分类:XiunoBBS 没多级分类,只能手动把原标签/分类改成一级版块。
  3. SEO:XiunoBBS 默认就是 /thread-123.htm伪静态 OK
    子比文章原来的 /2025/08/hello-world.html 用 Nginx 301 跳转到新地址即可。

实测耗时 & 坑点

步骤 耗时 踩坑提醒
WXR 导出 3 分钟 子比文章多会 413,分批导
Python 拆 XML 2 分钟 子比特色图字段名 _thumbnail_id
CSV 导入 MySQL 1 分钟 Navicat 选 UTF-8
PHP 脚本灌库 1 分钟 Xiuno 默认过滤 HTML,strip_tags 先保命
手动补图、分类 N 小时 无解,只能人肉

一键脚本懒人包

我把 wxr2xiuno.py + wp2xiu.php 打包丢在 Gitee:
https://gitee.com/lyong9102/wp-to-xiuno
下载后按 README 两条命令即可跑完,喝完咖啡就搬完


结论

子比模板到 XiunoBBS 没有官方转换器,本质就是字段对不上
用脚本只能解决 80%,剩下 20% 得靠耐心
如果你文章超过 5 万篇,建议直接雇个实习生——比折腾脚本便宜。

万事屋原创,转载请注明出处:https://www.rei3.com

请登录后发表评论

    没有回复内容

万事屋新帖