找回密码
 注册
搜索
免费空间 免费域名 免费AI 老牌主机商首月仅1美分!27美元/年!Namecheap优惠码Spaceship优惠码
楼主: yaner

[问题求助] 怎么把wordpress数据导入到blogger

[复制链接]
发表于 2026-1-31 21:42:43 | 显示全部楼层
yaner 发表于 2026-1-31 21:35
是的,有时候找方法消耗的时间是简单方法耗费晨间的无数倍,无限试错

这说明你不懒
发表于 2026-2-2 02:12:32 | 显示全部楼层
本帖最后由 微醺 于 2026-2-2 02:13 编辑

我帮你找了一个在线转换工具

WordPress 转 Blogger XML 转换器
https://wordpresstoblogger.softspace.in/

可以把WP的备份文件转换为XML格式,这个XML文件可以直接导入到blogger

评分

参与人数 1银币 +10 收起 理由
efc88ff45580620 + 10 很给力!

查看全部评分

 楼主| 发表于 2026-2-2 19:16:00 | 显示全部楼层
微醺 发表于 2026-2-2 02:12
我帮你找了一个在线转换工具

WordPress 转 Blogger XML 转换器

这个以前也试过,不太行。提示导入成功,一篇文章都没有
 楼主| 发表于 2026-2-2 19:16:48 | 显示全部楼层
使用下面这个php转换代码,终于可以了.

  1. <?php
  2. /**
  3. * WordPress to Blogger Converter (Final Fix for Import Overwrite)
  4. * 修复重点:生成纯数字 ID,防止 Blogger 导入时因 ID 格式错误而覆盖文章
  5. */

  6. $inputFile = 'wordpress.xml'; // 你的源文件
  7. $outputPrefix = 'blogger_final_';
  8. $postsPerFile = 50;

  9. if (!file_exists($inputFile)) {
  10.     die("错误: 找不到输入文件 '{$inputFile}'。\n");
  11. }

  12. echo "正在读取 WordPress 文件...\n";

  13. libxml_use_internal_errors(true);
  14. $wpXml = simplexml_load_file($inputFile);

  15. if ($wpXml === false) {
  16.     die("错误: 无法解析 XML 文件。\n");
  17. }

  18. // 获取命名空间
  19. $ns = $wpXml->getNamespaces(true);
  20. // 补全可能缺失的命名空间
  21. if (!isset($ns['wp'])) $ns['wp'] = 'http://wordpress.org/export/1.2/';
  22. if (!isset($ns['content'])) $ns['content'] = 'http://purl.org/rss/1.0/modules/content/';
  23. if (!isset($ns['dc'])) $ns['dc'] = 'http://purl.org/dc/elements/1.1/';

  24. $items = [];

  25. // 1. 提取有效文章
  26. if (isset($wpXml->channel->item)) {
  27.     foreach ($wpXml->channel->item as $item) {
  28.         $wpData = $item->children($ns['wp']);
  29.         $postType = (string)$wpData->post_type;
  30.         $status = (string)$wpData->status;

  31.         if (!in_array($postType, ['post', 'page'])) continue;
  32.         if ($status === 'trash' || $status === 'auto-draft') continue;

  33.         $items[] = $item;
  34.     }
  35. }

  36. $totalPosts = count($items);
  37. echo "共找到 {$totalPosts} 篇有效文章。\n";

  38. // 2. 分批处理
  39. $fileIndex = 1;
  40. $chunkedItems = array_chunk($items, $postsPerFile);

  41. // 基准时间戳,用于生成唯一的纯数字 ID
  42. $baseId = time();
  43. $globalCounter = 0;

  44. foreach ($chunkedItems as $chunk) {
  45.     $dom = new DOMDocument('1.0', 'UTF-8');
  46.     $dom->formatOutput = true;

  47.     // 创建根节点,并添加完整的 Google/Blogger 命名空间
  48.     $feed = $dom->createElementNS('http://www.w3.org/2005/Atom', 'feed');
  49.     $feed->setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:app', 'http://purl.org/atom/app#');
  50.     $feed->setAttributeNS('http://www.w3.org/2000/xmlns/', 'xmlns:gd', 'http://schemas.google.com/g/2005'); // 关键:添加 gd 命名空间
  51.     $dom->appendChild($feed);

  52.     $generator = $dom->createElement('generator', 'Blogger');
  53.     $generator->setAttribute('version', '7.00');
  54.     $feed->appendChild($generator);
  55.    
  56.     $feed->appendChild($dom->createElement('updated', date('Y-m-d\TH:i:s\+00:00')));

  57.     foreach ($chunk as $item) {
  58.         $globalCounter++;

  59.         $wpData = $item->children($ns['wp']);
  60.         $contentData = $item->children($ns['content']);
  61.         $dcData = $item->children($ns['dc']);
  62.         
  63.         $postType = (string)$wpData->post_type;
  64.         $status = (string)$wpData->status;
  65.         $postDate = (string)$wpData->post_date;

  66.         $entry = $dom->createElement('entry');

  67.         // ========================================================
  68.         // [核心修复] 生成纯数字 ID
  69.         // ========================================================
  70.         // 格式:tag:blogger.com,1999:blog-1.post-[纯数字]
  71.         // 我们使用 (基准时间 + 计数器) 确保它是唯一的整数
  72.         // 例如:17172345671, 17172345672...
  73.         $pureNumericId = $baseId . sprintf('%04d', $globalCounter);
  74.         
  75.         // 注意这里 blog-1 是个虚拟的 Blog ID,只要 post- 后面的数字唯一即可
  76.         $idUri = 'tag:blogger.com,1999:blog-1.post-' . $pureNumericId;
  77.         
  78.         $entry->appendChild($dom->createElement('id', $idUri));
  79.         // ========================================================

  80.         // 标题
  81.         $title = (string)$item->title;
  82.         $titleNode = $dom->createElement('title');
  83.         $titleNode->setAttribute('type', 'html');
  84.         if (trim($title) === '') { $title = "Untitled"; }
  85.         $titleNode->appendChild($dom->createTextNode($title));
  86.         $entry->appendChild($titleNode);

  87.         // 内容
  88.         $content = (string)$contentData->encoded;
  89.         if (!empty($content)) {
  90.             $content = nl2br($content);
  91.         }
  92.         $contentNode = $dom->createElement('content');
  93.         $contentNode->setAttribute('type', 'html');
  94.         $contentNode->appendChild($dom->createCDATASection($content));
  95.         $entry->appendChild($contentNode);

  96.         // 时间
  97.         try {
  98.             $dateTime = new DateTime($postDate);
  99.             $isoDate = $dateTime->format('Y-m-d\TH:i:s\+00:00');
  100.         } catch (Exception $e) {
  101.             $isoDate = date('Y-m-d\TH:i:s\+00:00');
  102.         }
  103.         $entry->appendChild($dom->createElement('published', $isoDate));
  104.         $entry->appendChild($dom->createElement('updated', $isoDate));

  105.         // 分类定义 (Page vs Post)
  106.         $typeCategory = $dom->createElement('category');
  107.         $typeCategory->setAttribute('scheme', 'http://schemas.google.com/g/2005#kind');
  108.         if ($postType === 'page') {
  109.             $typeCategory->setAttribute('term', 'http://schemas.google.com/blogger/2008/kind#page');
  110.         } else {
  111.             $typeCategory->setAttribute('term', 'http://schemas.google.com/blogger/2008/kind#post');
  112.         }
  113.         $entry->appendChild($typeCategory);

  114.         // 标签/分类
  115.         if (isset($item->category)) {
  116.             foreach ($item->category as $cat) {
  117.                 $catName = (string)$cat;
  118.                 if ($catName !== 'Uncategorized' && trim($catName) !== '') {
  119.                     $tagNode = $dom->createElement('category');
  120.                     $tagNode->setAttribute('scheme', 'http://www.blogger.com/atom/ns#');
  121.                     $tagNode->setAttribute('term', $catName);
  122.                     $entry->appendChild($tagNode);
  123.                 }
  124.             }
  125.         }

  126.         // 作者
  127.         $authorNode = $dom->createElement('author');
  128.         $creator = (string)$dcData->creator;
  129.         $nameNode = $dom->createElement('name', $creator ? $creator : 'Admin');
  130.         $authorNode->appendChild($nameNode);
  131.         $entry->appendChild($authorNode);

  132.         // 草稿状态
  133.         if ($status !== 'publish') {
  134.             $control = $dom->createElementNS('http://purl.org/atom/app#', 'app:control');
  135.             $draft = $dom->createElementNS('http://purl.org/atom/app#', 'app:draft', 'yes');
  136.             $control->appendChild($draft);
  137.             $entry->appendChild($control);
  138.         }

  139.         $feed->appendChild($entry);
  140.     }

  141.     $filename = $outputPrefix . $fileIndex . '.xml';
  142.     $dom->save($filename);
  143.     echo "已生成文件: {$filename} (包含 " . count($chunk) . " 篇文章)\n";
  144.     $fileIndex++;
  145. }

  146. echo "全部完成!请尝试删除 Blogger 中已导入的错误文章,然后重新导入新文件。\n";
  147. ?>
复制代码

评分

参与人数 1银币 +10 收起 理由
efc88ff45580620 + 10 赞一个!

查看全部评分

发表于 2026-2-4 14:19:08 | 显示全部楼层
yaner 发表于 2026-2-2 19:16
使用下面这个php转换代码,终于可以了.

还是这个可行,我导入两次后就提示我导入太多了,不让我操作了
然后就出现SSL handshake failed 525或者404
发表于 2026-2-4 14:43:22 | 显示全部楼层
yaner 发表于 2026-1-31 19:47
绑定域名可以直接访问,但是有些样式文件似乎加载不完整

有没有演示,ghs.google.com应该是通了
发表于 2026-2-4 21:11:35 | 显示全部楼层
jason 发表于 2026-2-4 14:43
有没有演示,ghs.google.com应该是通了

我的域名解析到这里,只能科学访问
发表于 2026-2-4 23:14:01 来自手机 | 显示全部楼层
我的今天折腾导入文件后现在绑定的域名也无法访问了
 楼主| 发表于 2026-2-5 00:23:41 | 显示全部楼层
jason 发表于 2026-2-4 14:43
有没有演示,ghs.google.com应该是通了

spot.xd94.com
 楼主| 发表于 2026-2-5 00:25:43 | 显示全部楼层
wxk 发表于 2026-2-4 23:14
我的今天折腾导入文件后现在绑定的域名也无法访问了

放出来看看,我的目前还可以访问,文章如果特别多,分段那里可以设置多一点,比如200,默认是50
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|小黑屋|免费吧论坛

GMT+8, 2026-6-5 00:39 , Processed in 0.074205 second(s), 4 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表