簡體   English   中英

RSS問題-Drupal到WordPress的遷移

[英]RSS Issue - Drupal to WordPress Migration

我正在使用此站點中的腳本將Drupal數據庫遷移到WordPress。 似乎工作正常,但RSS提要除外,當我嘗試訪問它時返回HTTP 304錯誤。

我認為問題出在以下幾行:

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提要停止工作。 但是,如果我在不清空上述表格的情況下進行博客文章的導入,則提要似乎可以正常工作。

有什么想法嗎?

在以上一行中,我認為沒有任何問題。 因此,您必須檢查所有代碼:

數據庫轉換表Drupal 6.x表WordPress 2.9x等效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實例中,我主要將分類法用作標簽,但是您可能有不同的需求。 您可能需要根據想要導入分類法的方式修改以下查詢中的第三行:

 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.9x開始,自定義帖子類型僅可通過插件使用。 您可以使用以下未修改的查詢,它將所有故事轉換為帖子,其他所有內容都將按原樣轉移。 如果需要轉換其他職位類型,則可以添加其他案例聲明。

示例:當“書”然后“書”

我還調整了查詢​​,以便根據我的GMT偏移-6:00(中央時間)正確填充“ post_date_gmt”。 如果您在其他時區,則需要調整FROM_UNIXTIME(created + 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);

更新后Sl

Drupal的URL別名等同於WordPress的永久鏈接。 Drupal具有比WordPress更激進的標題衛生。 遷移到WordPress時,出於SEO的原因,我希望能夠保持標題不變。

為了保留我的舊標題,我需要使用與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 />";

如果您按照本教程進行操作,則在遇到問題時,我根據Drupal設置進行了一些更改,並使用WordPress數據庫描述作為參考。 如果您通過Drupal的界面上傳圖像,則可能需要完成一些其他步驟,但是上述查詢能夠成功地將我的數據從Drupal遷移到WordPress。

使用HtmlAgilityPack for Visual Studio幫助快速構建了一個導入器,以遍歷Drupal的每個帖子,並使用XMLRPC將它們添加到Wordpress。 由於Drupal在發布內容和發布后宣傳中有兩個單獨的列,因此將Drupal導入到Wordpress中的方法要好得多,這樣您就可以動態添加<!--more-->標簽。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM