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ành777
- 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 filewordpress-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
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ề 😀
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ị!