Clicky

Migrating from WordPress to Drupal | suksit dot com

Migrating from WordPress to Drupal

โพสต์นี้จะเล่าประสบการณ์การ migrate จาก WordPress 2.3.1 มาเป็น Drupal 6.2 ครับ ตอนแรกยังนึกๆ ว่าน่าจะยุ่งยากพอสมควร เพราะลอง google ดูแล้วไม่ค่อยจะเจอข้อมูลที่ต้องการเท่าไร แต่พอทำจริงๆ แล้วปรากฏว่าง่ายกว่าที่คิดมากๆ

เครื่องมือที่ใช้ในการทดลอง และลงมือ migrate จริงมีสองตัวครับ คือ WPDrupal และ Wordpress import ซึ่งเดี๋ยวจะสรุปให้ฟังอีกทีว่าแต่ละตัวเป็นยังไงบ้าง

ก่อนการ migrate สิ่งแรกที่ควร(ต้อง)ทำคือ backup ทุกอย่างที่ขวางหน้า สำหรับผมก็ backup ไฟล์ WordPress ทั้งหมด โดย FTP จากโฮสต์มาไว้ในเครื่องตัวเอง รวมทั้ง export ฐานข้อมูลทั้งหมดออกมาด้วย

จากนั้นก็ใช้ชุดโปรแกรมประเภท *AMP (Apache + MySQL + PHP) ทั้งหลาย จำลองเครื่องตัวเองเป็นเว็บเซิร์ฟเวอร์ เพื่อเอาไว้ทั้งทดลอง และทำการ migrate จริงด้วย ถ้าพลาดไปก็ไม่เป็นไร เพราะบล็อกที่อยู่บนโฮสต์ก็ยังใช้งานได้ตามปกติ ซอฟต์แวร์ประเภทนี้ตัวที่ผมชอบที่สุดคือ XAMPP หรือถ้าอยากสนับสนุนซอฟต์แวร์ของคนไทยก็ใช้ AppServ โลด

ถ้าวัตถุดิบทุกอย่างพร้อมแล้วก็

  • ติดตั้งไฟล์ + ฐานข้อมูล WordPress ที่เรา backup มา ให้รันได้ตามปกติบนเครื่องตัวเอง
  • ติดตั้ง Drupal 5 แบบสดๆ ซิงๆ ที่เจาะจงว่าเป็นเวอร์ชัน 5 เพราะ migration tools ที่ลองทั้งหมด สนับสนุนแค่ Drupal 5.x

แล้วจึงเริ่มทดลอง migrate กัน

ยกแรก: WPDrupal จาก Prime 357

ลอง google ดูแล้วไปเจอตัวนี้เข้า ประกอบกับมีคนแนะนำไว้ใน Twitter เลยโหลดมาลองซะ ลักษณะเป็น Windows Application (มีของ Linux กับ Mac ด้วย) ที่ใช้งานค่อนข้างง่าย มี dialog ให้กรอกรายละเอียด MySQL connection ของ source (WordPress) และ target (Drupal) จากนั้นก็เลือกอีกนิดหน่อยว่าจะให้ import permalinks มาด้วยหรือเปล่า และโพสต์ที่ import เข้ามา จะให้ชนิดของ node เป็น Blog, Page หรือ Story จากนั้นก็คลิกปุ่ม import แล้วนั่งรอ...

ผลลัพธ์คือ "ไม่เวิร์ก"1 ครับ เพราะข้อความภาษาไทยกลายเป็นตัว ??? ไปหมดเลย ทั้งๆ ที่ encoding ของฐานข้อมูลต้นทางกับปลายทาง เป็น UTF-8 ทั้งคู่ เข้าใจว่ามันคงโดนเปลี่ยนระหว่างทางแน่ๆ

เกือบจะถอดใจ ก็พอดีไปเจออีกตัวนึง จริงๆ น่าจะเจอตัวนี้ก่อนด้วยซ้ำ เพราะมันเป็นโมดูลของ Drupal นั่นเอง

ยกที่สอง: โมดูล Wordpress import ของ Drupal

วิธีการใช้ก็เหมือนการติดตั้งโมดูลทั่วๆ ไปครับ โดยหลังจากติดตั้ง Drupal 5.7 และสร้าง user id 1 แล้ว ก็ติดตั้งและ enable โมดูลตัวนี้ซะ มันจะมีเมนูโผล่ขึ้นมาใน Administer -> Content management -> Wordpress import

พอคลิกเข้าไปแล้วจะพบหน้าให้อัพโหลดไฟล์ WXR ซึ่งเป็นไฟล์ export ของ WordPress โดยจะเป็นไฟล์ .xml ที่ได้จากที่เมนู Manage -> Export ในหน้า admin ของ WordPress นั่นเอง ใช้ WordPress มาเกือบสองปี ไม่เคยใช้ฟีเจอร์นี้เลย ให้ตายสิ

หลังจากได้ไฟล์ .xml (WXR) มา ก็กด Browse... เลือกไฟล์ แล้วกด Next เพื่อทำขั้นตอนต่อไป ซึ่งมันจะให้เลือก map user ของ WordPress เข้ากับ user ของ Drupal แล้วก็จะให้เลือกว่าจะ import permalinks เข้ามาด้วยมั้ย (ใน Drupal เรียก path alias) จากนั้นคลิก Next อีกรอบก็เป็นอันเสร็จพิธี2

ข้อมูลโพสต์ทั้งหมดจะถูก import เป็น Story และข้อมูล page ก็ถูก import มาเป็น Page ส่วน Category และ Tags ใน WordPress ก็จะถูก import มาอยู่ใน taxonomy ชื่อ Wordpress category และ Wordpress tag ตามลำดับ

อัพเกรดเป็น Drupal 6.2

พอทุกอย่างเข้่าที่เข้าทางแล้ว ก็ disable โมดูล Wordpress import แล้วก็ลบไฟล์ของ Drupal 5 ทิ้งให้หมด (แนะนำให้ backup settings.php ไว้ก่อน) แล้วก๊อปปี้ไฟล์ของ Drupal 6 ลงไปแทน รัน update.php เพื่ออัพเกรดฐานข้อมูลให้เป็น Drupal 6

ลบ WordPress ลง Drupal

พอลองเล่นในเครื่องตัวเองจนคิดว่าโอเคแล้ว ก็ export ฐานข้อมูล Dupal จากเครื่องตัวเองออกมาครับ แล้วก็ลบไฟล์ + ฐานข้อมูล WordPress ออกจากโฮสต์ และติดตั้งไฟล์ + ฐานข้อมูล Drupal จากเครื่องของเราลงไปบนโฮสต์แทน3


  1. จริงๆ เค้าให้ใช้กับ WordPress 2.5 แต่ผมขี้เกียจอัพเกรด และดูๆ แล้วฐานข้อมูลส่วนที่เปลี่ยนแปลงจาก 2.3 --> 2.5 ก็ไม่น่าทำให้ข้อมูลโพสต์ที่ migrate ไปเละได้ 

  2. อันนี้ผมโชคดี เพราะมัน support แค่ WordPress 2.3 ซึ่งของผมก็เป็น 2.3 พอดี แต่น่าจะเวิร์กกับ 2.5 ด้วยเช่นกัน ถ้ารูปแบบไฟล์ WXR ไม่มีการเปลี่ยนแปลง 

  3. อย่าลืมแก้ settings.php ด้วยนะครับ 

3 comments

Arthuran's picture
Arthuran (visitor) says:

ยินดีด้วยกับความสำเร็จครับ

แต่ว่าจะเสร็จ คงต้องใช้เวลาไม่น้อยเหมือนกัน (^_^)

Anonymous's picture
Anonymous (visitor) says:

thanks, nice post ;-)

tin's picture
tin (visitor) says:

ผมใช้ wp 2.7 กำลังลอง export posts และ category และ tags ออกมาครับ งงมาก ๆ

Post new comment

The content of this field is kept private and will not be shown publicly. If you have a Gravatar account associated with the e-mail address you provide, it will be used to display your avatar.