
Code xóa dữ liệu Flamingo khi sử dụng Contact Form 7
Plugin Flamingo trong WordPress được phát triển bởi Takayuki Miyoshi (tác giả của Contact Form 7) và chủ yếu dùng để lưu trữ các tin nhắn gửi từ biểu mẫu liên hệ (contact forms) trên trang web.
Chức năng chính của Flamingo
- Lưu trữ tin nhắn: Khi sử dụng Contact Form 7, mặc định các tin nhắn chỉ được gửi qua email mà không lưu lại trên website. Flamingo giúp lưu trữ các tin nhắn này trong cơ sở dữ liệu để dễ dàng quản lý.
- Quản lý danh bạ khách hàng: Flamingo tự động thu thập thông tin người gửi và tạo danh sách liên hệ trong phần quản trị.
- Dễ dàng tìm kiếm & xuất dữ liệu: Bạn có thể tra cứu, lọc và xuất dữ liệu tin nhắn theo nhu cầu.
- Tích hợp tốt với Contact Form 7: Nếu bạn đang dùng Contact Form 7, Flamingo là một giải pháp lưu trữ tin nhắn thay thế khi email bị lỗi hoặc không nhận được email.
Flamingo khá hữu ích để lưu các tin nhắn được submit từ plugin Contact form 7 nhưng nay tôi có gặp 1 trường hợp plugin Flamingo lưu lại tin nhắn tận 28k Inbound Messages và Flamingo Address Book hơn 8k, plugin này không có chức năng tự động xoá tin nhắn định kỳ nên làm cho database phình lênh nhanh chóng và làm website trở nên ì ạch.
Sau khi xử lý xong thì đây là code snipet mình share cho những ai đang gặp tình trạng này có thể copy dán vào là ăn ngay.
Code xóa dữ liệu Flamingo khi sử dụng Contact Form 7
Bạn có thể copy code dưới đây, dán vào file functions.php rồi tải lại trang wp-admin để code bắt đầu xoá.
add_action('init', 'vutruso_delete_flamingo_data_on_load'); function vutruso_delete_flamingo_data_on_load() { global $wpdb; $time_start = microtime(true); // Các post type cần xóa $post_types = array('flamingo_inbound', 'flamingo_contact', 'flamingo_outbound'); $post_types_placeholder = implode(',', array_fill(0, count($post_types), '%s')); // Xóa bài viết từ bảng wp_posts $wpdb->query( $wpdb->prepare( "DELETE FROM {$wpdb->posts} WHERE post_type IN ($post_types_placeholder)", $post_types ) ); // Xóa meta liên quan từ bảng wp_postmeta $wpdb->query( "DELETE pm FROM {$wpdb->postmeta} pm LEFT JOIN {$wpdb->posts} p ON p.ID = pm.post_id WHERE p.ID IS NULL" ); $time_end = microtime(true); $time = $time_end - $time_start; error_log("Flamingo data deleted. Time taken: {$time} seconds."); }
add_action(‘init’, ‘vutruso_delete_flamingo_data_on_load’);
→ Chạy khi WordPress khởi động.
error_log(“Flamingo data deleted. Time taken: {$time} seconds.”);
→ Ghi log vào error log của PHP để kiểm tra thời gian xử lý.
Sau khi add code vào functions.php và xoá toàn bộ tin nhắn bạn nên xoá code đi nhé, khi nào cần xoá thì hãy add vào.
Ngoài ra bạn cũng có thể thử qua plugin Inazo’s flamingo automatically delete old messages (mình dùng cách trên hoạt động tốt nên chưa thử nên chưa sử dụng plugin trên nên chưa có đánh giá)
🛠 Lưu ý
Đoạn code này sẽ xoá dữ liệu Flamingo mỗi lần trang được tải. Nếu muốn kiểm soát tần suất xóa, bạn có thể dùng WP Cron để chạy theo lịch trình.
Nếu số lượng dữ liệu lớn, có thể gây chậm website. Nếu cần giải pháp tối ưu hơn, hãy đặt điều kiện kiểm tra (VD: chỉ xóa khi có hơn 1000 bản ghi).