0

このサイトのスクリプトを使用して、Drupal データベースを WordPress に移行しています。アクセスしようとすると HTTP 304 エラーを返す RSS フィードを除いて、問題なく動作するようです。

問題は次の行のどこかにあると思います。

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 フィードが機能しなくなります。ただし、上記のテーブルを空にせずにブログ投稿のインポートを実行すると、フィードは正常に機能するようです。

何かご意見は?

4

2 に答える 2

0

上記の行では、問題はないと思います。したがって、すべてのコードをチェックアウトする必要があります。

データベース変換テーブル Drupal 6.x テーブル WordPress 2.9x 同等の term_data, term_hierarchy wp_terms node, node_revisions `wp_posts term_node wp_term_relationships コメント wp_comments

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.9x の時点では、カスタム投稿タイプはプラグインを介してのみ使用できます。以下のクエリを変更せずに使用すると、すべてのストーリーが投稿に変換され、それ以外はすべてそのまま転送されます。追加の投稿タイプを変換する必要がある場合は、追加の case ステートメントを追加できます。

例: WHEN 'book' THEN 'post'

また、'post_date_gmt' が -6:00 (中部時間) の 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);

投稿スラッグの更新

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 />";

このチュートリアルに従っている場合は、問題が発生したときに WordPress データベースの説明を参考にして、Drupal のセットアップに基づいていくつかの変更を加えました。Drupal のインターフェースを介して画像をアップロードした場合は、いくつかの追加手順を完了する必要があるかもしれませんが、上記のクエリにより、データを Drupal から WordPress に正常に移行できました。

于 2012-08-16T08:27:17.983 に答える
0

HtmlAgilityPack for Visual Studio を使用すると、Drupal の各投稿を調べて、XMLRPC を使用して Wordpress に追加するためのインポーターをすばやく構築するのに大いに役立ちました。Drupal には投稿コンテンツと投稿ティーザー用の 2 つの個別の列があるため、この方法で Drupal を Wordpress にインポートし<!--more-->て、その場でタグを追加できるようにする方がはるかに優れています。

于 2012-08-23T12:08:09.040 に答える