Mình đã thử viết một đoạn script PHP như sau:
Mã: Chọn tất cả
<?php
require_once('wp-load.php'); // Nạp WordPress
global $wpdb;
// Lấy danh sách bài viết có chứa class="custom-internal-link"
$posts = $wpdb->get_results("SELECT ID, post_content FROM {$wpdb->posts} WHERE post_content LIKE '%class=\"custom-internal-link\"%'", ARRAY_A);
foreach ($posts as $post) {
// Xóa title trong các thẻ <a> có class="custom-internal-link"
$new_content = preg_replace('/<a([^>]*?)\s+title="[^"]*"\s+class="custom-internal-link"([^>]*?)>/', '<a\1 class="custom-internal-link"\2>', $post['post_content']);
if ($new_content !== $post['post_content']) {
$wpdb->update(
$wpdb->posts,
['post_content' => $new_content],
['ID' => $post['ID']],
['%s'],
['%d']
);
}
}
echo "Cập nhật thành công!";
?>
Một số thắc mắc và lưu ý mình đang có:
- Độ tin cậy của regex: Đoạn regex này có hoạt động ổn không nếu thứ tự của thuộc tính trong thẻ <a> thay đổi (ví dụ: class đứng trước title)? Có cần cải tiến thêm để xử lý được nhiều trường hợp khác nhau không?
- Hiệu năng khi xử lý 7000 bài viết: Mình có nên chia nhỏ xử lý theo từng lô (batch processing) hay chạy qua CLI thay vì trình duyệt để tránh lỗi timeout không?
- Ảnh hưởng đến các liên kết khác: Liệu đoạn script này có vô tình làm thay đổi các liên kết không có thuộc tính title hoặc không có class="custom-internal-link" không?
Mình mong nhận được góp ý, cải tiến hoặc giải pháp thay thế nếu có. Cảm ơn mọi người rất nhiều!