2012-08-15 2 views
0

this site의 스크립트를 사용하여 Drupal 데이터베이스를 WordPress로 마이그레이션하고 있습니다. 그것은 액세스하려고하면 HTTP 304 오류를 반환 RSS 피드를 제외하고, 확인 작동하는 것 같습니다.RSS 이슈 - 드루팔 (Drupal to 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; 

스크립트가 워드 프레스 데이터베이스를 비워, RSS 작동이 중지 공급한다. 그러나 위의 표를 비우지 않고 블로그 게시물을 가져온 경우 피드가 제대로 작동하는 것 같습니다.

의견이 있으십니까?

답변

0

Visual Studio 용 HtmlAgilityPack을 사용하면 가져 오기 도구를 빠르게 작성하여 각각의 Drupal 게시물을 통해 XMLRPC를 사용하여 Wordpress에 추가 할 수있었습니다. 드루팔 (Drupal은 게시물 내용과 포스트 티저를위한 두 개의 별도 컬럼을 가지고 있기 때문에 Drupal을 Wordpress로 가져 오는 것이 훨씬 편합니다. <!--more--> 태그를 즉시 추가 할 수 있습니다.

0

위의 줄에는 아무런 문제가 없다고 생각됩니다.

데이터베이스 변환 표 드루팔 6.x의 테이블 (들) 워드 프레스 2.9 배 상당 term_data, term_hierarchy wp_terms 노드, node_revisions의`의 wp_posts term_node이 코멘트 wp_comments

을 wp_term_relationships : 그래서 당신은 모든 코드를 검사해야

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); 

가져 오기 포스트 내용

드루팔은 잠시 워드 프레스 2.9 배의로, 사용자 정의 포스트 유형을 허용 : 당신은 당신이 분류법은 수입하려는 방법에 따라 아래 쿼리에서 3 번째 줄을 수정해야 할 수도 있습니다 유형은 플러그인을 통해서만 사용할 수 있습니다. 아래의 쿼리를 수정하지 않고 사용할 수 있으며 모든 스토리를 게시물로 변환하고 나머지는 그대로 전송합니다. 추가 게시물 유형을 변환해야하는 경우 케이스 문을 추가 할 수 있습니다.

예 : '책'THEN '포스트'나는 또한 쿼리를 조정

그래서 'post_date_gmt가'-6의 오프셋 (offset) 내 GMT에 따라 제대로 설치 것이라고 : 00 (중부 표준시). 다른 시간대에있는 경우 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 별명은 워드 프레스의 퍼머 링크와 동일합니다. 드루팔 (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; 
    } 

당신은 당신의 주요 워드 프레스 디렉토리에있는 파일 즉 "수정-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의 인터페이스를 통해 이미지를 업로드했지만 위의 쿼리를 통해 Drupal에서 WordPress로 내 데이터를 성공적으로 마이그레이션 할 수 있다면 추가 단계가 완료되어야합니다.