在上述行中,我认为没有任何问题。所以你必须检查所有的代码:
数据库转换表 Drupal 6.x Table(s) WordPress 2.9x 等效 term_data, term_hierarchy wp_terms node, node_revisions `wp_posts term_node wp_term_relationships comments 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.9x 开始,自定义帖子类型只能通过插件获得。您可以使用未修改的以下查询,它将所有故事转换为帖子,其他所有内容都将按原样转移。如果您需要转换其他帖子类型,可以添加其他案例语句。
示例:WHEN 'book' THEN 'post'
我还调整了查询,以便根据我的 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);
更新帖子蛞蝓
Drupal 的 URL 别名等同于 WordPress 的永久链接。与 WordPress 相比,Drupal 具有更积极的标题卫生。在迁移到 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。