將 MT + LifeType 文章轉換到 WordPress 步驟

最早期使用的 Blog 系統是 MT (Movable Type), 後來使用 pLog (LifeType), MT 系統要維護還蠻麻煩的(Spam 太多), 於是趁這次將全部文章都統一倒進 WordPress 裡面, 一併解決.

此轉換需要做下述準備:

  • Export MT 文章 (用系統本身的 Export 功能即可), Export 格式可參考: The Movable Type Import / Export Format
  • Export LifeType 文章 (可見: LifeType 透過 RSS Dump 所有文章 - 這個不一定會用到, 可以先不準備此步驟)
  • 解決圖片、檔案對應 (網址 Rewrite)
  • 解決網址對應的 Rewrite (Category, Article)
    • MT 網址格式: /archives/000590.html
    • LifeType 網址格式: /my_note-unix/2011/03/18/build-git-env-share-over-ssh-2011

MT 與 LifeType 版本

  • MT 版本: 2.x
  • LifeType 版本: lifetype-1.2.11_r7114

MT + LifeType 轉換到 WordPress 的步驟

安裝 WordPress 與 相關外掛
首先先安裝好 WordPress 3.1 版, 並安裝下述外掛:

MT 資料匯入

將 WordPress 預設 DB 的資料清空, 進入 MySQL 的 WordPress DB.

  1. mysql -u root wordpress
  2. truncate table wp_terms;
  3. truncate table wp_comments;
  4. truncate table wp_posts;
  5. truncate table wp_term_taxonomy;
  6. truncate table wp_term_relationships;
  7. 將 MT.dump 資料先 Feed 進 DB. (使用 Movable Type and TypePad Importer 的外掛)

計算 MT 的文章、意見和分類等 數量

  • select MAX(ID) from wp_posts; // 593筆
  • select MAX(comment_ID) from wp_comments; // 104筆
  • select MAX(term_id) from wp_terms; // 12筆
  • select * from wp_term_relationships; // object_id = ID, term_taxonomy_id, 592筆 (max object_id = 593)
  • select MAX(term_taxonomy_id), term_id from wp_term_taxonomy; // term_taxonomy_id (1~12) = term_id, 12筆
  • 註: wp_term_relationships 是 文章與 Category 的對應關係

LifeType 資料匯入 與 處理

在此時, 請另外安裝一套新的 WordPress、DB (因為需要先將資料匯入, 做完處理才可以做整合的動作)

LifeType 資料匯入 WordPress

若使用 RSS 匯入, 檔案太大可修改下述: (RSS 匯入的話, 文章的意見都不會匯入) - 若不是請跳過此步驟.

  1. vim /etc/php5/apache2/php.ini
    upload_max_filesize = 2M # 改成 20M
  2. /etc/init.d/apache2 reload

將 LifeType 由 DB(下述 LifeType 的 DB name 是 "plog") 直接匯入 WordPress (若只要做 LifeType 轉進 WordPress, 依照此步驟即可)

  1. mysql -u root wordpress
  2. truncate table wp_terms;
  3. truncate table wp_comments;
  4. truncate table wp_posts;
  5. truncate table wp_term_taxonomy;
  6. truncate table wp_term_relationships;
  7. INSERT INTO wp_terms ( term_id, name, slug ) SELECT id, name, mangled_name FROM plog.plog_articles_categories;
  8. INSERT INTO wp_comments (comment_ID, comment_post_ID, comment_content, comment_date, comment_date_gmt, comment_author_email, comment_author_url, comment_author, comment_author_IP) SELECT id, article_id, normalized_text, DATE, DATE + INTERVAL - 16 HOUR, user_email, user_url, user_name, client_ip FROM plog.plog_articles_comments;
  9. #INSERT INTO wp_posts (ID, post_author, post_date, post_date_gmt, post_modified, post_modified_gmt, comment_count) SELECT id, 1, DATE, DATE + INTERVAL - 16 HOUR, DATE, DATE + INTERVAL - 16 HOUR, num_comments FROM plog.plog_articles
  10. INSERT INTO wp_posts (ID, post_author, post_name, post_date, post_date_gmt, post_modified, post_modified_gmt, comment_count) SELECT id, 1, slug, DATE, DATE + INTERVAL - 16 HOUR, DATE, DATE + INTERVAL - 16 HOUR, num_comments FROM plog.plog_articles;
  11. UPDATE wp_posts, plog.plog_articles_text SET wp_posts.post_title = plog.plog_articles_text.topic WHERE wp_posts.ID = plog.plog_articles_text.article_id;
    UPDATE wp_posts, plog.plog_articles_text SET wp_posts.post_content = plog.plog_articles_text.TEXT WHERE wp_posts.ID = plog.plog_articles_text.article_id;
    UPDATE wp_posts SET wp_posts.guid=CONCAT( "https://blog.longwin.com.tw/?p=" , wp_posts.ID) WHERE wp_posts.guid = "";
  12. UPDATE wp_posts SET post_content=REPLACE(post_content,'[@more@]',"<!--more-->"); # 將文章內的"繼續閱讀" 轉換成 WP 的格式
  13. INSERT INTO wp_term_taxonomy ( term_taxonomy_id, term_id) SELECT id, id FROM plog.plog_articles_categories;
  14. INSERT INTO wp_term_relationships ( object_id, term_taxonomy_id ) SELECT article_id, category_id FROM plog.plog_article_categories_link;
  15. UPDATE wp_term_taxonomy SET count = ( SELECT count(*) FROM plog.plog_article_categories_link WHERE plog.plog_article_categories_link.category_id=wp_term_taxonomy.term_id );
  16. UPDATE wp_term_taxonomy SET taxonomy = 'category';
  17. 若是只要做 LifeType 轉進 WordPress 的話, 到此步驟就已經完成了.
處理 LifeType 資料, 準備整合 MT

摘要, 需要處理下述 Table, 並加上 MT 相對應得值.

wp_comments:

  • comment_ID: comment_ID + mt 意見數量 (104)
  • comment_post_ID: comment_post_ID + mt 文章數量 (593)

wp_posts:

  • ID + mt 文章數量 (593)

wp_terms:

  • term_id + mt 分類數量 (12)

wp_term_relationships:

  • object_id + mt 文章數量 (593)
  • term_taxonomy_id + mt 分類數量 (12)

wp_term_taxonomy:

  • term_taxonomy_id + mt 分類數量 (12)
  • term_id + mt 分類數量 (12)

執行上述摘要, 因為要作加法的動作, 會造成 Primary key 重複, 所以先要拿掉 Primary Key 和 auto_increment.

  1. 拿掉 Primary Key 和 auto_increment
    • alter table wp_comments modify comment_ID bigint(20) unsigned;
    • alter table wp_comments drop primary key;
    • alter table wp_terms modify term_id bigint(20) unsigned;
    • alter table wp_terms drop primary key;
    • alter table wp_term_relationships drop primary key;
    • alter table wp_term_taxonomy modify term_taxonomy_id bigint(20) unsigned;
    • alter table wp_term_taxonomy drop primary key;
    • alter table wp_term_taxonomy drop key `term_id_taxonomy`;
    • alter table wp_posts modify ID bigint(20) unsigned;
    • alter table wp_posts drop primary key;
  2. 執行增加編號的動作
    • UPDATE wp_comments SET comment_ID = comment_ID + 104, comment_post_ID = comment_post_ID + 593;
    • UPDATE wp_terms SET term_id = term_id + 12;
    • UPDATE wp_term_relationships SET term_taxonomy_id = term_taxonomy_id + 12, object_id = object_id + 593;
    • UPDATE wp_term_taxonomy SET term_taxonomy_id = term_taxonomy_id + 12, term_id = term_id + 12;
    • UPDATE wp_posts SET ID = ID + 593;
    • UPDATE wp_posts SET wp_posts.guid=CONCAT( "https://blog.longwin.com.tw/?p=" , wp_posts.ID);
  3. 將此 WordPress 的 DB 資料 Dump 出來, 只需要"資料".
    • mysqldump -u root tmp_wordpress | grep 'INSERT' > lifetype-wp.sql

將 LifeType 資料寫入已經有 MT 資料的 DB

  • mysql -u root wordpress < lifetype-wp.sql

Apache 設定網址永久轉換

到此, 已經將 MT + LifeType 的資料, 全部都整合進 WordPress 的系統裡面了.

再來就是要作 Apache Rewrite 的動作 (將舊的網址, 做 301 Redirect 到新的網址)

  • MT 網址格式: /archives/000590.html
  • LifeType 網址格式: /my_note-unix/2011/03/18/build-git-env-share-over-ssh-2011
  • WordPress 網址格式: /2005/04/css-html-%E7%B7%A8%E7%A2%BC%E5%95%8F%E9%A1%8C/ (這是我挑選的)
  • 註: WordPress 對應網址, 會是 post_name + post_modified (post_modified_gmt 不會用到)

寫了兩隻簡單的 Script 來產生 Rewrite 的資料, 在自行將這些資料寫入 .htaccess 或 Apache 裡面即可.

MT 部份 (mt_rewrite.php)
LifeType 部份 (lifetype_rewrite.php)

註: 分類、檔案、圖片對應, 手動加 Rewrite 即可.

關於 Apache rewrite 的說明

  • 下述摘錄自: mod_rewrite - Apache HTTP Server # 下述特別摘錄對於網址列有 % 要如何處理. (\% + [R,NE])

    'noescape|NE' (no URI escaping of output)
    This flag prevents mod_rewrite from applying the usual URI escaping rules to the result of a rewrite. Ordinarily, special characters (such as '%', '$', ';', and so on) will be escaped into their hexcode equivalents ('%25', '%24', and '%3B', respectively); this flag prevents this from happening. This allows percent symbols to appear in the output, as in

    RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE]
    which would turn '/foo/zed' into a safe request for '/bar?arg=P1=zed'.

相關網頁

作者: Tsung

對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.

在〈將 MT + LifeType 文章轉換到 WordPress 步驟〉中有 2 則留言

  1. 很感謝你的方法, 我也成功的把LT轉成WP了, 不過你的方法有一個地方需要修正, 否則文章和迴響會對不上號...因為對MYSQL不是太熟, 所以研究很久..
    問題出在第11步:
    UPDATE wp_posts, plog.plog_articles_text SET wp_posts.post_title = plog.plog_articles_text.topic WHERE wp_posts.ID = plog.plog_articles_text.id;
    UPDATE wp_posts, plog.plog_articles_text SET wp_posts.post_content = plog.plog_articles_text.TEXT WHERE wp_posts.ID = plog.plog_articles_text.id;
    這裡的
    plog.plog_articles_text.id
    應該是
    plog.plog_articles_text.article_id
    才對, 因為text中的id是序列性的, 但lifetype會跳號重覆使用,
    請你參考!

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料