最近,有個用戶找模板兔遷移網站,源站用的dede,需要轉成wp,文章數量大概7000-8000篇,其中有個需求是保證舊文章的鏈接有效,在wp上的新文章與舊文章的鏈接類型不一樣,所以這涉及到偽靜態來處理跳轉。雖然網上都很多教程,但是在這次導入過程中還是遇到過一些問題。
以下教程是dede的數據表得與wp的數據表在同一個數據庫下!要是不在,可以將dede_archives先導入到wp的數據庫里。
一般流程
1. 文章標題等基本數據導入
織夢的文章標題、正文和欄目分別存放在三個不同的表上,但WordPress把文章標題和正文放在一個表上,欄目放在另外一個表上。
為了簡化后面的工作,第一步我首先把織夢的全站RSS文件(rss.php)保存下來,然后使用WordPress自帶的RSS導入該文件。這樣就可以使WordPress在wp_posts上生成文章標題,在dede_terms上生成文章目錄,并匹配起來。通過RSS導入,wp_posts上還導入了文章的摘要、日期、自定義網址等數據。但RSS導入不會導入全文。
2. 文章全文導入
織夢數據庫的文章全文儲存在dede_addonarticle表上的body里,我們要把這個body的內容轉到Worpress數據庫里wp_posts表上的post_content里。
這個轉換,需要使用一個橋梁——那就是dede_archives,即dede_addonarticle上body的內容先轉到dede_archives上,再從dede_archives上再轉到wp_posts上的post_content里。這兩次轉換的匹配點,分別是織夢里的文章id,以及Wordpress里已經導入了的文章標題(這與織夢里的文章標題是一樣的)。
具體步驟如下:
進入phpMyAdmin,在織夢數據庫里的dede_archives表上,添加一個列,命名為body,然后用UPDATE命令把dede_addonarticle上的全文(body)導入到dede_archives的body上,以dede_addonarticle上的aid和dede_archives上的id為匹配點:
UPDATE?`dede_archives`,`dede_addonarticle` SET?`dede_archives`.`body`=?`dede_addonarticle`.`body` WHERE?`dede_archives`.`id`?=?`dede_addonarticle`.`aid`
接下來把整個dede_archives表導入到WordPress的數據庫上,使其與wp_posts同在一個數據庫下。
再次使用UPDATE命令把,把dede_archives上的body導入到wp_posts上的post_content上,以文章標題為匹配點 (前提是,你的文章標題都是唯一的):
UPDATE?`wp_posts`,`dede_archives` SET?`wp_posts`.`post_content`=?`dede_archives`.`body` WHERE?`wp_posts`.`post_title`?=?`dede_archives`.`title`
3. 文章點擊數導入
在WordPress上安裝一個叫Simple Hit Counter的Plug-in,這樣數據庫里就出現一個叫wp_hitcount的表。
在wp_posts增加一個叫hits的column,然后把dede_archives上的點擊數click導入到wp_posts的hits上,仍然以標題為匹配點。
最后把wp_posts的hits導入到wp_hitcount的hits上,這次以wp_posts的ID和wp_hitcount的pid為匹配點。
常見問題
1、把rss.xml導入wordpress時提示不能獲取文章id
Rss.xml編碼如果和wp系統的編碼不一樣,在導入wp時,就會提示不能獲取文章id。例如你用的織夢是gbk版本的,而默認的wp是utf版本,就會提示這個錯誤了。
解決方法:很簡單,如果你用的是織夢gbk,那么生成的rss.xml就是gbk的,用dreamwear等編輯工具,把rss.xml改成utf的,之后導入wp,問題就解決了。
2、導入rss.xml的文章數量限制
當你的織夢內容很多時,例如有好幾萬篇文章,那么導出的rss.xml中也就包含幾萬標題。在導入wp時,在導入到2000左右就會卡住,不能導入了。
解決方法:很簡單,只要把rss.xml重復導入到wp就可以了,因為第二次導入rss.xml時,第一次導入的內容會被跳過,第二次會導入新的內容,重復導入幾次后,rss.xml就完全導入成功了。
3、如果織夢數據導入wordpress后,wp網站首頁內容顯示正常,但內容頁沒有顯示內容。
這應該是你wp的固定連接問題,解決方法:wp后臺——設置——固定連接,修改成默認,問題就解決了。
4、在文章全文導入的時候,可能由于文章數量很多,一次性執行sql語句后導致mysql直接掛掉了(這個看各自服務器性能,模板兔的這個客戶用的是win主機,性能并不好),所以無奈只能分批次來轉換,例如通過wp_posts表里的ID區間來分批轉換。
UPDATE?wp_posts,dede_archives?SET?wp_posts.post_content?= dede_archives.body?WHERE?wp_posts.post_title?= dede_archives.title?and?wp_posts.ID?<?501
UPDATE wp_posts,dede_archives SET wp_posts.post_content = dede_archives.body WHERE wp_posts.post_title = dede_archives.title and wp_posts.ID < 1001 and wp_posts.ID > 500
以此類推,看你文章多少來決定,我每次執行時間是2兩多鐘。。。而且在導入過程中還會出現error,提示字符串的問題。
來源:https://www.mobantu.com/6576.html