上記の行では、問題はないと思います。したがって、すべてのコードをチェックアウトする必要があります。
データベース変換テーブル 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 に正常に移行できました。