2012-08-15 69 views
0

我使用this site的腳本將Drupal數據庫遷移到WordPress。它似乎工作正常,除了RSS源,當我嘗試訪問它時返回HTTP 304錯誤。RSS問題 - Drupal到WordPress遷移

我認爲問題出在以下幾行的地方:

TRUNCATE TABLE wordpress.wp_comments; 
TRUNCATE TABLE wordpress.wp_links; 
TRUNCATE TABLE wordpress.wp_postmeta; 
TRUNCATE TABLE wordpress.wp_posts; 
TRUNCATE TABLE wordpress.wp_term_relationships; 
TRUNCATE TABLE wordpress.wp_term_taxonomy; 
TRUNCATE TABLE wordpress.wp_terms; 

當腳本清空WordPress數據庫,RSS源停止工作。但是,如果我在不清空上述表格的情況下導入博客帖子,那麼Feed似乎可以正常工作。

有什麼想法?

回答

0

使用HtmlAgilityPack爲Visual Studio中快速構建進口商要經過各Drupal的職位,並使用XMLRPC它們添加到WordPress的幫助很大。由於Drupal爲帖子內容和帖子預告片提供了兩個單獨的列,所以將Drupal導入Wordpress更好一些,因此您可以隨時添加<!--more-->標籤。

0

在上面的行我認爲沒有任何問題。所以,你必須檢查所有代碼:

數據庫轉換表 Drupal的6.x的表(一個或多個)的WordPress 2.9倍等效 term_data,term_hierarchy wp_terms 節點,node_revisions`wp_posts term_node wp_term_relationships 評論wp_comments

截斷WordPress表格

首先,我需要刪除當前在某些wordpress表格中的任何數據,以便我可以使用新版本。

注意:默認情況下,當您安裝wordpress時,除非您將其更改爲其他內容,否則所有表都以wp_作爲前綴。如果您使用wp_以外的其他任何內容,則需要修改以下查詢。

TRUNCATE TABLE wp_comments; 
TRUNCATE TABLE wp_postmeta; 
TRUNCATE TABLE wp_posts; 
TRUNCATE TABLE wp_term_relationships; 
TRUNCATE TABLE wp_term_taxonomy; 
TRUNCATE TABLE wp_terms; 

導入分類術語

下一集的查詢的進口分類方面。

注意:表名預先用drupal。需要成爲你的drupal數據庫的實際名稱。您需要將其更改爲您有任何drupal數據庫命名的任何內容。

INSERT INTO wp_terms (term_id, name, slug, term_group) 
    SELECT d.tid, d.name, REPLACE(LOWER(d.name), ' ', '-'), 0 
    FROM drupal.term_data d 
    INNER JOIN drupal.term_hierarchy h 
    USING(tid); 

默認情況下,WordPress有幾種可用的分類類型;類別,post_tag和link_category。在我的Drupal實例中,我主要將分類法用作標籤,但您可能有不同的需求。您可能需要根據你想怎麼分類導入修改3號線在下面的查詢:

Categories: category 
    Link Categories: link_category 
    Post Tags: post_tag 



INSERT INTO wp_term_taxonomy (term_taxonomy_id, term_id, taxonomy, 
           description, parent) 
     SELECT d.tid, d.tid, 'post_tag', d.description, h.parent 
     FROM drupal.term_data d 
     INNER JOIN drupal.term_hierarchy h 
     USING(tid); 

導入帖子內容

Drupal允許自定義文章類型,同時爲WordPress的2.9倍的,自定義後類型只能通過插件使用。您可以使用未經修改的下面的查詢,它會將所有故事轉換爲帖子,其他所有內容將按原樣轉換。如果您需要轉換其他的帖子類型,您可以添加額外的case語句。

例子: 如果「書」,那麼「後」

我還調整了查詢​​,以便「post_date_gmt」將基於我的GMT -6偏移正確填充:00(美國中部時間)。如果您位於不同的時區,則需要根據您的位置調整FROM_UNIXTIME(創建+ 21600)以減去或添加正確。

INSERT INTO 
wp_posts (id, post_date, post_date_gmt, post_content, post_title, 
post_excerpt, post_name, post_type, post_modified) 
SELECT DISTINCT 
n.nid, FROM_UNIXTIME(created), 
FROM_UNIXTIME(created+21600), body, n.title, teaser, LOWER(n.title), 
(CASE n.TYPE 
    WHEN 'story' THEN 'post' 
    ELSE n.TYPE 
END) AS TYPE, 
FROM_UNIXTIME(changed) 
FROM drupal.node n, drupal.node_revisions r 
WHERE n.vid = r.vid; 

導入後,分類的關係

INSERT INTO wp_term_relationships (object_id, term_taxonomy_id) 
    SELECT nid, tid FROM drupal.term_node; 
Category Count Updating 





UPDATE wp_term_taxonomy tt 
SET COUNT = (
SELECT COUNT(tr.object_id) 
FROM wp_term_relationships tr 
WHERE tr.term_taxonomy_id = tt.term_taxonomy_id 
); 

導入註釋

INSERT INTO wp_comments (comment_post_ID, comment_date, 
     comment_content, comment_parent, comment_author, 
     comment_author_email, comment_author_url, comment_approved) 
SELECT nid, FROM_UNIXTIME(TIMESTAMP), comment, thread, 
      name, mail, homepage, STATUS 
FROM drupal.comments; 

更新評論次數

UPDATE wp_posts 
    SET comment_count = (SELECT COUNT(comment_post_id) 
    FROM wp_comments 
    WHERE wp_posts.id = wp_comments.comment_post_id); 

更新後的蛞蝓

Drupal的URL別名相當於WordPress的永久鏈接。 Drupal擁有比WordPress更具侵略性的標題衛生條件。我希望能夠保持我的標題相同的SEO原因遷移到WordPress時。

爲了保持我的老冠軍,我需要掛接到類似的規則,以Drupal的WordPress的稱號衛生。下面的代碼需要放在當前主題的functions.php文件中。

add_filter('sanitize_title', 'my_sanitize_title'); 
function my_sanitize_title($title) { 
                              $title                       =                           preg_replace('/\b(a|an|as|at|before|but|by|for|from|is|in|into|like|of|off|on|onto|per|since|than|the|this|that|to|up|via|with)\b/i', '', $title); 
    $title = preg_replace('/-+/', '-', $title); 
    $title = trim($title, '-'); 
    return $title; 
    } 

您需要將以下代碼保存到您的主WordPress目錄中的「fix-slugs.php」文件,並通過瀏覽器運行它。

< ?php 

    require_once('wp-load.php'); 

    $posts = $wpdb->get_results(
"SELECT ID, post_title, post_name FROM $wpdb->posts" 
    ); 

    $count = 0; 
    $ignored = 0; 
    $errors = 0; 
    foreach($posts as $post) { 
    if(strcmp($slug = sanitize_title($post->post_title), $post->post_name) !== 0) { 
    $wpdb->show_errors(); 
    if(($result = $wpdb->query("UPDATE $wpdb->posts SET post_name='$slug' WHERE ID=$post->ID")) === false) { 
    $errors++; 
    } elseif($result === 0) { 
    $ignore++; 
    } else { 
    $count++; 
    } 
} else { 
    $ignored++; 
} 
} 

echo "<strong>$count post slug(s) sanitized.</strong><br />"; 
echo "$ignored post(s) ignored.<br />"; 
echo "$errors error(s).<br />"; 

如果你學習本教程之後,我做了基於使用WordPress數據庫描述作爲參考,當我遇到問題我的Drupal的設置進行一些更改。如果您通過Drupal的界面上傳圖片,可能需要完成一些額外的步驟,但上述查詢能夠成功將我的數據從Drupal遷移到WordPress。