Hoàng Web

Thiết Kế Website WordPress

  • Kho giao diện
  • Dịch Vụ
    • Thiết kế web giá rẻ
    • Thiết kế website WordPress
    • Hosting Miễn Phí 100GB
    • Tích hợp thanh toán MoMo, ViettelPay, Vietcombank, MB..
    • Tối ưu Google PageSpeed
    • Sửa lỗi nâng cấp website
    • Viết plugin WordPress
    • Code Tool theo yêu cầu
  • Bảng giá
  • Quy trình làm việc
  • Giới thiệu
  • Liên Lạc
Trang chủ » Thủ thuật » Gộp dữ liệu từ 2 blog WordPress

Gộp dữ liệu từ 2 blog WordPress

Thứ Năm, 15/11/2018 by Hoàng Quách

Nội dung

  • 1 Phương pháp gộp bài viết (tham khảo)
    • 1.1 Xóa lệnh tạo bảng
    • 1.2 Đánh lại chỉ số
    • 1.3 Di chuyển thư mục uploads
    • 1.4 Nhập dữ liệu
  • 2 Gộp dữ liệu từ 2 blog WordPress
    • 2.1 Vấn đề gặp phải?
  • shares
  • Facebook
  • Facebook Messenger
  • Gmail
  • Viber
  • Skype

Sau khi khách hàng chọn giao diện WordPress, họ có yêu cầu thêm chúng tôi nhập dữ liệu từ 2 blog khác vào website mới. Đây là bài toán di chuyển website wordpress sang hosting khác. Điều này đã phát sinh thêm ý tưởng cho tôi, Làm sao bạn có thể nhập dữ liệu của 2 WordPress database thành một? bài viết này mình sẽ tập trung giải quyết cách gộp dữ liệu bài viết, sản phẩm từ 2 database khác nhau.

Trước khi thực hiện, bạn nên thực hiện sao lưu dữ liệu WordPress an toàn để bạn có thể khôi phục bất cứ trường hợp nào nếu gặp lỗi

Phương pháp gộp bài viết (tham khảo)

Cách thức này chỉ để cho các bạn biết nguyên lý hoạt động của bảng wp_posts, và dữ liệu Posts được lưu trong database ra sao , với những blog có nhiều bài viết hay sản phẩm mình khuyến khích sử dụng cách thứ hai. Tuy nhiên bạn hãy đọc qua bước này để hiểu hơn nhé.

Xuất dữ liệu bảng wp_options & lưu vào file .sql:

Bước đầu tiên, bạn cần xuất dữ liệu bảng wp_posts bằng cách tạo file .sql cho bảng này từ phpMyadmin. Từ giao diện phpMyadmin, nhấn tab Export nhấn chọn bảng wp_posts & nhấn “Save as File” để lưu file về máy tính.

Tiếp theo, bạn làm tương tự với blog WordPress khác. Sau khi đã xuất file sql bạn mở tệp và tìm Post ID cuối cùng trong file này.

Xóa lệnh tạo bảng

Vì bảng này đã được tạo với file .sql đầu tiên, các file .sql sau sẽ không cần lệnh tạo bảng wp_options nữa, nếu không xóa bạn sẽ gặp lỗi khi nhập dữ liệu.

Đánh lại chỉ số

Bây giờ bạn cần nhập lại ID mới cho mỗi dòng Post trong file .sql, bắt đầu sau chỉ số từ Post ID cuối cùng của file sql thứ hai. Nếu bạn bỏ qua bước này & khi nhập dữ liệu sẽ có nhiều dữ liệu bị trùng lặp và quá trình nhập sẽ bị lỗi, không thành công. Hãy làm như thế này:

Ngược lại, rất có thể bạn có lỗi:

Di chuyển thư mục uploads

Sẽ có nhiều liên kết ảnh có trong các bài viết của bạn. Nếu bạn thực sự muốn xóa liên kết ảnh từ domain cũ và đổi sang domain mới, bạn cần copy thư mục uploads, và ghi đề vào thư mục uploads của blog chính. Vì 2 website sử dụng WordPress CMS, đều có cấu trúc thư mục giống nhau, bạn chỉ cần copy đè thư mục, những files mới sẽ thêm vào thư mục đó. Tiếp theo, bước quan trọng sau sẽ thay thế toàn bộ liên kết của miền cũ có lưu trong database sang tên miền mới. Để làm điều này bạn tìm & thay thế URL trong file sql.

Tìm: http://OLD-domain.com/wp-content/uploads/
Thay thế: http://NEW-domain.com/wp-content/uploads/

Nhập dữ liệu

Như vậy bạn đã sửa xong file sql mới, sau đây bạn tiến hành nhập dữ liệu từ file sql này vào CSDL của WordPress. Truy cập vào phpMyadmin của website bạn muốn gộp dữ liệu, rồi nhấn tab Import, chọn tệp sql của bạn và nhấn nút Go. Kết quả dữ liệu bài viết Post của 2 blog đã được gộp thành công.

Ở trên mình đã trình bầy cách thức gộp posts của 2 blog WordPress, tuy nhiên ngoài dữ liệu Posts (bài viết, sản phẩm, dữ liệu tùy chỉnh) còn có các danh mục Taxonomy, bình luận. Bạn có thể sử dụng cách tương tự như trên đối với những dữ liệu này, nhưng kỹ thuật sẽ phức tạp hơn & mình cũng không chắc nó có thể hoạt động. Do website của mình có vài danh mục & không có quá nhiều bình luận nên mình làm theo cách thủ công sủ dụng giao diện quản trị WordPress để nhập trực tiếp.

Gộp dữ liệu từ 2 blog WordPress

Đây là cách mình sử dụng để gộp website WooCommerce với cơ sở dữ liệu của một blog WordPress lớn. Với cách thứ nào đi nữa, trước khi thực hiện bạn đừng quên sao lưu WordPress vào máy tính hay cloud của bạn nhé.

Vấn đề gặp phải?

Nhiều bạn mắc phải lỗi trùng lặp primary keys khi gộp các bảng WordPress mà không thay đổi ID. Có thể bạn nghĩ MySQL sẽ tự động sửa giá trị primary keys khi dữ liệu được nhập thêm. Điều này là đúng? nhưng nếu bạn để ý khi xuất dữ liệu bảng ra tệp .sql nó chứa đầy đủ dữ liệu của các trường & trong đó có cả cột ID, do đó MySQL sẽ luôn sử dụng giá trị của trường dù trường đó xác định là khóa chính.

Vấn đề mình gặp phải nếu gộp nhiều bảng với nhau sql sẽ bị lỗi, script chỉ hoạt động khi gộp 1 bảng. Do các khóa chính ở các bảng mysql khác nhau có chỉ số ID với thứ tự không đều nhau, Vậy chúng ta phải làm sao?

Giải pháp đơn giản, chúng ta sẽ tăng dần ID của tất cả các khóa chính và khóa bổ xung (foreign keys) với bắt đầu bằng một con số X. X tùy thuộc vào số lượng entry trong bảng. Ví dụ sau mình giả sử có 2 CSDL db1 & db2. Bạn muốn chèn thêm posts, danh mục, hình ảnh từ db2 vào db1. Lưu ý, để xuất dữ liệu db2 bạn sử dụng lệnh Mysqldump với tham số –no-something-or-other flag , sau đó nhập dữ liệu vào db1.

Script dưới đây sẽ xuất file db2.sql bao gồm dữ liệu bài viết, trang, sản phẩm WooCommerce, hình ảnh, danh mục từ database db2. Bạn có thể sửa cấu hình phù hợp với web hosting của bạn.

# WordPress export
# Assuming the db details are:
# db_name = db2
# db_user = root
# db_pass = pass
# =============================================================================

echo "Change all IDs to avoid conflicts"
echo "===================================================="

# wp_posts
mysql --user=root --password= db2 -e "UPDATE wp_posts 
    SET id = REPLACE(
        id, 
        wp_posts.id, 
        wp_posts.id + 10000
    ) 
    WHERE id > 0"

# wp_postmeta
# Increment post_id 
# Increment meta_value fields for post thumbnails to retain reference
mysql --user=root --password= db2 -e "UPDATE wp_postmeta 
    SET post_id = REPLACE(
        post_id, wp_postmeta.post_id, 
        wp_postmeta.post_id + 10000
    ) 
    WHERE post_id > 0"
mysql --user=root --password= db2 -e "UPDATE wp_postmeta 
    SET meta_value = REPLACE(
        meta_value, 
        wp_postmeta.meta_value, 
        wp_postmeta.meta_value + 10000
    ) 
    WHERE meta_key = '_thumbnail_id'"

# wp_terms
mysql --user=root --password= db2 -e "UPDATE wp_terms 
    SET term_id = REPLACE(
        term_id, wp_terms.term_id, 
        wp_terms.term_id + 10000
    ) 
    WHERE term_id > 0"

# wp_term_taxonomy
mysql --user=root --password= db2 -e "UPDATE wp_term_taxonomy 
    SET term_taxonomy_id = REPLACE(
        term_taxonomy_id, wp_term_taxonomy.term_taxonomy_id, 
        wp_term_taxonomy.term_taxonomy_id + 10000
    ) 
    WHERE term_taxonomy_id > 0"
mysql --user=root --password= db2 -e "UPDATE wp_term_taxonomy 
    SET term_id = REPLACE(
        term_id, 
        wp_term_taxonomy.term_id, 
        wp_term_taxonomy.term_id + 10000
    ) 
    WHERE term_id > 0"
mysql --user=root --password= db2 -e "UPDATE wp_term_taxonomy 
    SET parent = REPLACE(
        parent, 
        wp_term_taxonomy.parent, 
        wp_term_taxonomy.parent + 10000
    ) 
    WHERE parent > 0"

# wp_term_relationships
mysql --user=root --password= db2 -e "UPDATE wp_term_relationships 
    SET object_id = REPLACE(
        object_id, 
        wp_term_relationships.object_id, 
        wp_term_relationships.object_id + 10000
    ) 
    WHERE object_id > 0"
mysql --user=root --password= db2 -e "UPDATE wp_term_relationships 
    SET term_taxonomy_id = REPLACE(
        term_taxonomy_id, 
        wp_term_relationships.term_taxonomy_id, 
        wp_term_relationships.term_taxonomy_id + 10000
    ) 
    WHERE term_taxonomy_id > 0"

echo "Now for the dumping"
echo "===================================================="

mysqldump --no-create-info --user=root --password= db2 wp_posts > wp_posts.sql
mysqldump --no-create-info --user=root --password= db2 wp_postmeta > wp_postmeta.sql
mysqldump --no-create-info --user=root --password= db2 wp_terms > wp_terms.sql
mysqldump --no-create-info --user=root --password= db2 wp_term_taxonomy > wp_term_taxonomy.sql
mysqldump --no-create-info --user=root --password= db2 wp_term_relationships > wp_term_relationships.sql

echo "Edit exported files to allow for seamless inserting"
echo "===================================================="

# wp_postmeta id's don't need to be force incremented. Remove all ID inserts
sed -ir "s/[)],[(][0-9]*,/),(/g" wp_postmeta.sql
sed -i "s/INSERT INTO \`wp_postmeta\` VALUES ([0-9]*,/INSERT INTO \`wp_postmeta\` (\`post_id\`, \`meta_key\`, \`meta_value\`) VALUES (/g" wp_postmeta.sql

# Prevents duplicates on wp_terms and wp_users script import
sed -i "s/);/) ON DUPLICATE KEY UPDATE slug = slug;/g" wp_terms.sql

Lưu ý: Users từ db1 sẽ được xóa, và chỉ để lại bảng wp_users của db1. Khi bạn sử lý db1 hoàn tất, bước cuối cùng bạn sẽ nhập db2.sql sang CSDL db1.

# Import into dummy DB
echo "Import into dummy DB"
echo "===================================================="
mysql -u root -p db1 < wp_posts.sql
mysql -u root -p db1 < wp_postmeta.sql
mysql -u root -p db1 < wp_terms.sql
mysql -u root -p db1 < wp_term_taxonomy.sql
mysql -u root -p db1 < wp_term_relationships.sql

Như vậy sử dụng script trên bạn có thể gộp dữ liệu từ 2 WordPress site vào một website WordPress của bạn. Ngoài ra bạn có thể sao lưu WordPress sử dụng plugin WP Migrate DB và di chuyển từ server này sang server khác.

Hãy cho mình biết suy nghĩ của bạn trong phần bình luận bên dưới bài viết này. Hãy theo dõi kênh chia sẻ kiến thức WordPress của Hoangweb trên Twitter và Facebook

  • shares
  • Facebook
  • Facebook Messenger
  • Gmail
  • Viber
  • Skype

Chuyên mục: Thủ thuật

Tôi giúp gì cho bạn?

HOÀNG WEB

Địa chỉ: Tây Sơn, Phường Quang Trung, Quận Đống Đa, Hà Nội

Hotline: 0987 342 124 – 0868 292 303 (8h:00 – 21h:00)

Email: [email protected]

Website: www.hoangweb.com

KẾT NỐI VỚI TÔI

  • Facebook
  • GitHub
  • YouTube

SẢN PHẨM

  • Plugin Thanh Toán Quét Mã QR Code Tự Động
  • WP2Speed – Tối ưu Google Speed
  • 23WebHost – Hosting Miễn Phí 100GB

LIÊN KẾT

  • Có nên thuê thiết kế website giá rẻ?
  • Hướng dẫn thanh toán
  • Chính sách hoàn tiền
  • Trung tâm hỗ trợ

Copyright © 2023 | All rights reserved | HOANG WEB
Mọi hình thức sao chép nội dung trên website này mà chưa được sự đồng ý đều là trái phép.