Hướng dẫn cách chuyển các comment từ Artalk về lại WordPress

Vài năm nay thèng bibica.net sử dụng Artalk thay thế cho hệ thống comment mặc định của WordPress, câu chuyện cũng không có gì, chủ yếu đôi khi mình muốn thử 1 hệ thống comment khác, hay muốn quay về hệ thống comment mặc định của WordPress, có vào Github hỏi thử, nhưng cả năm rồi không thấy tác giả hỗ trợ

Đành ngồi chuyển về thủ công vậy

Bước 1: trên Artalk xuất ra file backup

Vào /sidebar/#/transfer, ấn vào Export, nó sẽ tạo ra file dạng backup-2025211-224210.artrans

Bước 2: trên WordPress

  • Tạo thư mục artrans2wordpress, chmod thành 777
  • Bên trong tạo 1 file php convert.php có nội dung như bên dưới
  • Sửa lại nội dung dòng 11 và 14 theo thông tin của bạn
<?php
// Bật hiển thị lỗi
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// Tăng giới hạn bộ nhớ
ini_set('memory_limit', '256M');

// Kết nối đến WordPress
require_once('/var/www/html/wp-load.php');

// Đọc file .artrans
$artrans_json = file_get_contents('backup-2025211-224210.artrans');
$artrans = json_decode($artrans_json, true);

// Kiểm tra lỗi JSON
if (json_last_error() !== JSON_ERROR_NONE) {
    die("Lỗi khi đọc file JSON: " . json_last_error_msg());
}

// Lấy danh sách bài viết trong WordPress và tạo bảng ánh xạ
$posts = get_posts(array(
    'numberposts' => -1,
    'post_type'   => 'post',
    'post_status' => 'publish',
));

$page_key_to_post_info = array();
foreach ($posts as $post) {
    $page_key = parse_url(get_permalink($post->ID), PHP_URL_PATH);
    $page_key_to_post_info[$page_key] = array(
        'ID' => $post->ID,
        'title' => $post->post_title,
        'link' => get_permalink($post->ID)
    );
}

// Tạo file XML với DOMDocument
$dom = new DOMDocument('1.0', 'UTF-8');
$dom->formatOutput = true;

// Tạo phần tử gốc <rss>
$rss = $dom->createElement('rss');
$rss->setAttribute('version', '2.0');
$rss->setAttribute('xmlns:excerpt', 'http://wordpress.org/export/1.2/excerpt/');
$rss->setAttribute('xmlns:content', 'http://purl.org/rss/1.0/modules/content/');
$rss->setAttribute('xmlns:wfw', 'http://wellformedweb.org/CommentAPI/');
$rss->setAttribute('xmlns:dc', 'http://purl.org/dc/elements/1.1/');
$rss->setAttribute('xmlns:wp', 'http://wordpress.org/export/1.2/');
$dom->appendChild($rss);

// Tạo phần tử <channel>
$channel = $dom->createElement('channel');
$rss->appendChild($channel);

// Thêm các phần tử bắt buộc trong <channel>
$channel->appendChild($dom->createElement('title', 'Comments Export'));
$channel->appendChild($dom->createElement('link', get_site_url()));
$channel->appendChild($dom->createElement('description', 'Exported comments from Artran to WordPress'));
$channel->appendChild($dom->createElement('pubDate', date('r')));
$channel->appendChild($dom->createElement('language', 'en-US'));
$channel->appendChild($dom->createElement('wp:wxr_version', '1.2'));

// Tạo mảng để nhóm comments theo bài viết
$comments_by_post = array();
foreach ($artrans as $artran) {
    $page_key = $artran['page_key'];
    if (!isset($comments_by_post[$page_key])) {
        $comments_by_post[$page_key] = array();
    }
    $comments_by_post[$page_key][] = $artran;
}

// Lặp qua từng bài viết và thêm comments tương ứng
foreach ($comments_by_post as $page_key => $comments) {
    if (!isset($page_key_to_post_info[$page_key])) {
        echo "Không tìm thấy bài viết tương ứng với page_key: $page_key<br>";
        continue;
    }

    $post_info = $page_key_to_post_info[$page_key];
    
    $item = $dom->createElement('item');
    $channel->appendChild($item);

    // Thêm thông tin cơ bản về bài viết
    $item->appendChild($dom->createElement('title'))->appendChild($dom->createCDATASection($post_info['title']));
    $item->appendChild($dom->createElement('link', $post_info['link']));
    $item->appendChild($dom->createElement('wp:post_id', $post_info['ID']));
    $item->appendChild($dom->createElement('wp:post_type', 'post'));
    $item->appendChild($dom->createElement('wp:status', 'publish'));

    // Thêm comments cho bài viết này
    foreach ($comments as $artran) {
        $comment = $dom->createElement('wp:comment');
        $item->appendChild($comment);

        // Ánh xạ các trường và sử dụng CDATA cho các trường chứa ký tự Unicode
        $comment->appendChild($dom->createElement('wp:comment_id', $artran['id']));
        $comment->appendChild($dom->createElement('wp:comment_author'))->appendChild($dom->createCDATASection($artran['nick']));
        $comment->appendChild($dom->createElement('wp:comment_author_email'))->appendChild($dom->createCDATASection($artran['email']));
        $comment->appendChild($dom->createElement('wp:comment_author_url'))->appendChild($dom->createCDATASection($artran['link']));
        $comment->appendChild($dom->createElement('wp:comment_author_IP', $artran['ip']));
        $comment->appendChild($dom->createElement('wp:comment_date', $artran['created_at']));
        $comment->appendChild($dom->createElement('wp:comment_date_gmt', gmdate('Y-m-d H:i:s', strtotime($artran['created_at']))));
        $comment->appendChild($dom->createElement('wp:comment_content'))->appendChild($dom->createCDATASection($artran['content']));
        $comment->appendChild($dom->createElement('wp:comment_approved', $artran['is_pending'] === 'false' ? 1 : 0));
        $comment->appendChild($dom->createElement('wp:comment_parent', $artran['rid']));
        $comment->appendChild($dom->createElement('wp:comment_post_ID', $post_info['ID']));
    }
}

// Lưu file XML
$dom->save('wordpress-comments.xml');

echo "Đã tạo file XML thành công: wordpress-comments.xml";
?>
  • Khi chạy convert.php nó sẽ tạo ra file wordpress-comments.xml

Bước 3: import vào WordPress

  • Trước khi import có thể xóa tất cả comment đang có trên WordPress bằng WP-CLI cho sạch sẽ
export WP_CLI_ALLOW_ROOT=1
wp comment delete $(wp comment list --format=ids) --force --allow-root

Lúc này có thể vào WordPress, Tools -> Import, chọn file wordpress-comments.xml để thêm vào các comment từ Artalk , khi chạy sẽ thấy vài cảnh báo, liên quan tới tài khoản hay bài viết đã có gì đó, nhưng không ảnh hưởng tới hiệu quả, cứ ấn đồng ý import là được

Hướng dẫn cách chuyển các comment từ Artalk về lại WordPress

Kiểm tra sơ bộ thì thấy các bình luận convert không bị lỗi tiếng Việt, nick, email, nội dung chính xác

Kết luận

Bài này chủ yếu viết để nhớ, vì mình không nghĩ có mấy người dùng Artalk, chưa kể đã dùng Artalk rồi cũng hiếm ai cần quay về lại comment gốc từ WordPress, mình có thử cấu hình lại, thấy sơ sơ cần dùng 4-6 cái plugin cài thêm vào, may ra mới có các tính năng như Artalk, mà quay lại mới thấy comment gốc nặng điên đảo, ấn gửi comment nhanh lắm cũng phải 2-3s mới xong 🙁

Lưu lại sơ cua, sau tác giả Artalk không còn viết nữa thì có đường quay về 😀


Related Posts

Chính sách bình luận: Chúng tôi rất trân trọng các bình luận của bạn và cảm ơn thời gian bạn dành để chia sẻ ý tưởng và phản hồi.
Ghi chú: Những bình luận được xác định là spam hoặc chỉ mang tính quảng cáo sẽ bị xóa.

• Để cải thiện trải nghiệm bình luận, chúng tôi khuyến khích bạn tạo một tài khoản Gravatar. Thêm avatar vào tài khoản Gravatar sẽ giúp bình luận của bạn dễ nhận diện hơn đối với các thành viên khác.

✂️ Sao chép và 📋 Dán Emoji 💪 giúp bình luận thêm sinh động và thú vị!