Blog合并记
背景故事
大D曾在 2011年年底进行过一次博客拆分。
当时大D窃以为维护两个博客不是什么难事,但是时间一长才发现这个事情非常之艰难。
不仅仅是写文上面的压力,还有很多的问题,诸如目前使用的主题有问题需要改很多的文件这些事儿简直就是家常便饭一样。
2013年下年半就有了将两个博客合二为一的想法,当时在准备下半年的自学考试,遂作罢。
这几天这件事情再次浮上心头,并且在今天(2013年12月6日)完成了合并。
P.S 当地时间2013年12月5日 伟大的反种族隔离斗士,诺贝尔和平奖获得者,南非的首任黑人总统——纳尔逊·罗利赫拉赫拉·曼德拉 于南非逝世,享年95岁。
向这位伟大的斗士,向这位值得尊敬的人致敬。
Beyond——《光辉岁月》
导出时遇到的问题
首先吐槽一下百度,昨天晚上睡不着手机上网搜索多个Wordpress站点合并这样的关键字,结果搜索到了一堆的多个Word文档合并。
百度做东西真是厉害啊。
顺便对方校长表示诚挚的感谢和衷心的祝福,是您让我无法流畅的使用其他搜索引擎的。
UserAgent信息消失的解决办法
在本地导入导出测试的时候,发现没有了UserAgent的数据,导入后所有的评论的浏览器操作系统信息都显示的是Unknown。
首先查看数据库,得知WP-UserAgent插件是向wp_comment表中的comment_agent字段写入数据的。
查看导出的xml文件,并没有comment_agent的段。
既然找到了问题的根源,那么首先需要对导出的内容进行处理。
导出文件的处理
打开wp-admin\includes\export.php,找到:
大约在405行。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?php $comments = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_approved <> 'spam'", $post->ID ) ); foreach ( $comments as $c ) : ?> <wp:comment> <wp:comment_id><?php echo $c->comment_ID; ?></wp:comment_id> <wp:comment_author><?php echo wxr_cdata( $c->comment_author ); ?></wp:comment_author> <wp:comment_author_email><?php echo $c->comment_author_email; ?></wp:comment_author_email> <wp:comment_author_url><?php echo esc_url_raw( $c->comment_author_url ); ?></wp:comment_author_url> <wp:comment_author_IP><?php echo $c->comment_author_IP; ?></wp:comment_author_IP> <wp:comment_date><?php echo $c->comment_date; ?></wp:comment_date> <wp:comment_date_gmt><?php echo $c->comment_date_gmt; ?></wp:comment_date_gmt> <wp:comment_content><?php echo wxr_cdata( $c->comment_content ) ?></wp:comment_content> <wp:comment_approved><?php echo $c->comment_approved; ?></wp:comment_approved> <wp:comment_type><?php echo $c->comment_type; ?></wp:comment_type> <wp:comment_parent><?php echo $c->comment_parent; ?></wp:comment_parent> <wp:comment_user_id><?php echo $c->user_id; ?></wp:comment_user_id> <?php $c_meta = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->commentmeta WHERE comment_id = %d", $c->comment_ID ) ); foreach ( $c_meta as $meta ) : ?> <wp:commentmeta> <wp:meta_key><?php echo $meta->meta_key; ?></wp:meta_key> <wp:meta_value><?php echo wxr_cdata( $meta->meta_value ); ?></wp:meta_value> </wp:commentmeta> <?php endforeach; ?> </wp:comment> <?php endforeach; ?> |
增加如下行,要写在<wp:comment></wp:comment>之间。
1 |
<wp:comment_agent><?php echo wxr_cdata( $c->comment_agent ) ?></wp:comment_agent> |
添加完之后如下:
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 |
<?php $comments = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_approved <> 'spam'", $post->ID ) ); foreach ( $comments as $c ) : ?> <wp:comment> <wp:comment_id><?php echo $c->comment_ID; ?></wp:comment_id> <wp:comment_author><?php echo wxr_cdata( $c->comment_author ); ?></wp:comment_author> <wp:comment_author_email><?php echo $c->comment_author_email; ?></wp:comment_author_email> <wp:comment_author_url><?php echo esc_url_raw( $c->comment_author_url ); ?></wp:comment_author_url> <wp:comment_author_IP><?php echo $c->comment_author_IP; ?></wp:comment_author_IP> <wp:comment_date><?php echo $c->comment_date; ?></wp:comment_date> <wp:comment_date_gmt><?php echo $c->comment_date_gmt; ?></wp:comment_date_gmt> <wp:comment_content><?php echo wxr_cdata( $c->comment_content ) ?></wp:comment_content> <wp:comment_approved><?php echo $c->comment_approved; ?></wp:comment_approved> <wp:comment_type><?php echo $c->comment_type; ?></wp:comment_type> <wp:comment_parent><?php echo $c->comment_parent; ?></wp:comment_parent> <wp:comment_user_id><?php echo $c->user_id; ?></wp:comment_user_id> <wp:comment_agent><?php echo wxr_cdata( $c->comment_agent ) ?></wp:comment_agent> <?php $c_meta = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->commentmeta WHERE comment_id = %d", $c->comment_ID ) ); foreach ( $c_meta as $meta ) : ?> <wp:commentmeta> <wp:meta_key><?php echo $meta->meta_key; ?></wp:meta_key> <wp:meta_value><?php echo wxr_cdata( $meta->meta_value ); ?></wp:meta_value> </wp:commentmeta> <?php endforeach; ?> </wp:comment> <?php endforeach; ?> |
至此导出文件中就包含WP-UserAgent插件生成的数据了。
重新导出之后,可以查看一下xml文件是否包含UserAgent的信息。一般UserAgent的信息如下:
1 |
<wp:comment_agent><![CDATA[Mozilla/5.0 (Windows NT 5.1) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.79 Safari/535.11]]></wp:comment_agent> |
导入文件的处理
确认导出的文件没有问题后,接下来处理导入部分。
导入部分Wordpress现行版本(3.7.1)采用的是插件导入的方法。插件的名字叫:WordPress Importer
打开插件目录(wp-content\plugins\wordpress-importer)下的parsers.php,找到208行如下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$post['comments'][] = array( 'comment_id' => (int) $comment->comment_id, 'comment_author' => (string) $comment->comment_author, 'comment_author_email' => (string) $comment->comment_author_email, 'comment_author_IP' => (string) $comment->comment_author_IP, 'comment_author_url' => (string) $comment->comment_author_url, 'comment_date' => (string) $comment->comment_date, 'comment_date_gmt' => (string) $comment->comment_date_gmt, 'comment_content' => (string) $comment->comment_content, 'comment_approved' => (string) $comment->comment_approved, 'comment_type' => (string) $comment->comment_type, 'comment_parent' => (string) $comment->comment_parent, 'comment_user_id' => (int) $comment->comment_user_id, 'commentmeta' => $meta, ); |
添加对comment_agent的定义。
1 |
'comment_agent' => (string) $comment->comment_agent, |
修改后
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$post['comments'][] = array( 'comment_id' => (int) $comment->comment_id, 'comment_author' => (string) $comment->comment_author, 'comment_author_email' => (string) $comment->comment_author_email, 'comment_author_IP' => (string) $comment->comment_author_IP, 'comment_author_url' => (string) $comment->comment_author_url, 'comment_date' => (string) $comment->comment_date, 'comment_date_gmt' => (string) $comment->comment_date_gmt, 'comment_content' => (string) $comment->comment_content, 'comment_approved' => (string) $comment->comment_approved, 'comment_type' => (string) $comment->comment_type, 'comment_parent' => (string) $comment->comment_parent, 'comment_user_id' => (int) $comment->comment_user_id, 'comment_agent' => (string) $comment->comment_agent, 'commentmeta' => $meta, ); } |
打开插件目录(wp-content\plugins\wordpress-importer)下的wordpress-importer.php,找到679行如下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
foreach ( $post['comments'] as $comment ) { $comment_id = $comment['comment_id']; $newcomments[$comment_id]['comment_post_ID'] = $comment_post_ID; $newcomments[$comment_id]['comment_author'] = $comment['comment_author']; $newcomments[$comment_id]['comment_author_email'] = $comment['comment_author_email']; $newcomments[$comment_id]['comment_author_IP'] = $comment['comment_author_IP']; $newcomments[$comment_id]['comment_author_url'] = $comment['comment_author_url']; $newcomments[$comment_id]['comment_date'] = $comment['comment_date']; $newcomments[$comment_id]['comment_date_gmt'] = $comment['comment_date_gmt']; $newcomments[$comment_id]['comment_content'] = $comment['comment_content']; $newcomments[$comment_id]['comment_approved'] = $comment['comment_approved']; $newcomments[$comment_id]['comment_type'] = $comment['comment_type']; $newcomments[$comment_id]['comment_parent'] = $comment['comment_parent']; $newcomments[$comment_id]['commentmeta'] = isset( $comment['commentmeta'] ) ? $comment['commentmeta'] : array(); if ( isset( $this->processed_authors[$comment['comment_user_id']] ) ) $newcomments[$comment_id]['user_id'] = $this->processed_authors[$comment['comment_user_id']]; } |
添加如下内容:
1 |
$newcomments[$comment_id]['comment_agent'] = $comment['comment_agent']; |
修改后如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
foreach ( $post['comments'] as $comment ) { $comment_id = $comment['comment_id']; $newcomments[$comment_id]['comment_post_ID'] = $comment_post_ID; $newcomments[$comment_id]['comment_author'] = $comment['comment_author']; $newcomments[$comment_id]['comment_author_email'] = $comment['comment_author_email']; $newcomments[$comment_id]['comment_author_IP'] = $comment['comment_author_IP']; $newcomments[$comment_id]['comment_author_url'] = $comment['comment_author_url']; $newcomments[$comment_id]['comment_date'] = $comment['comment_date']; $newcomments[$comment_id]['comment_date_gmt'] = $comment['comment_date_gmt']; $newcomments[$comment_id]['comment_content'] = $comment['comment_content']; $newcomments[$comment_id]['comment_approved'] = $comment['comment_approved']; $newcomments[$comment_id]['comment_type'] = $comment['comment_type']; $newcomments[$comment_id]['comment_parent'] = $comment['comment_parent']; $newcomments[$comment_id]['comment_agent'] = $comment['comment_agent']; $newcomments[$comment_id]['commentmeta'] = isset( $comment['commentmeta'] ) ? $comment['commentmeta'] : array(); if ( isset( $this->processed_authors[$comment['comment_user_id']] ) ) $newcomments[$comment_id]['user_id'] = $this->processed_authors[$comment['comment_user_id']]; } |
这时将生成的文件导入wordpress,就可以保证WP-UserAgent显示的是正常的了。
盛大
正在写这篇文章的时候,桌面右下角foxmail的弹窗来了。有一个待审的评论,看了一眼,居然有图挂了。
查看了一下,是原先存储在盛大糖果相册上的图,丫的。
盛大作为一个还算大的公司,暂停某项服务的时候都没有邮件提示,这是什么神一般的素质?
尼玛最不靠谱的中国Yahoo邮箱还给了用户导出数据的时间好么?
盛大不作为,差评思密达。
于是大D这几天抽个时间把所有外链的图片都转移会本地把。
收尾
还有点收尾工作,要对重复的分类目录进行调整。
致谢
感谢对题图提出意见的北极碎同学、兔兔同学。
更新
2013年12月6日23时26分 所有迁移工作结束。
把所有的网盘图片全都弄回VPS本地,简直要累死。。
已有 5 条评论
发表评论
电子邮件地址不会被公开。 必填项已标注。
管理两个博客..= =
@千寻 呵呵,现在我VPS上运行着5个站,只不过少了一个而已。。少年,你的更新速度还差得远。。
天下大博,分久必合,合久必分,哇哈哈哈
我能抢到第二么。。。话说网站折腾太辛苦了
合体了么?