Transients Là Gì?
Trong WordPress, transients là một cơ chế tạm thời để lưu dữ liệu dưới dạng key–value trong database (hoặc bộ nhớ nếu dùng object caching). Ví dụ, bạn có thể lưu kết quả một API call trong 12 giờ để tránh phải gọi lại nhiều lần. Transients bao gồm:
transient_nametransient_valueexpiration– thời hạn tồn tại
Tuy nhiên, khi các transient hết hạn, WordPress không xóa ngay lập tức khỏi cơ sở dữ liệu. Điều này khiến bảng wp_options phình to dần nếu không được dọn dẹp thường xuyên.
Cách Tự Động Xóa Transients Hết Hạn
Bạn có thể xóa thủ công thông qua plugin như WP-Optimize hoặc Advanced Database Cleaner, nhưng nếu bạn muốn làm việc này hoàn toàn tự động, hãy dùng đoạn mã sau.
Thêm Mã Vào functions.php:
/**
* Tự động xóa transients hết hạn mỗi ngày
*/
if ( ! wp_next_scheduled( 'cleanup_expired_transients_daily' ) ) {
wp_schedule_event( time(), 'daily', 'cleanup_expired_transients_daily' );
}
add_action( 'cleanup_expired_transients_daily', 'delete_expired_transients' );
function delete_expired_transients() {
global $wpdb;
$time = time();
$wpdb->query(
"DELETE FROM $wpdb->options
WHERE option_name LIKE '_transient_timeout_%'
AND option_value < $time"
);
$wpdb->query(
"DELETE a FROM $wpdb->options a
LEFT JOIN $wpdb->options b
ON a.option_name = REPLACE(b.option_name, '_timeout_', '_')
WHERE a.option_name LIKE '_transient_%'
AND b.option_name LIKE '_transient_timeout_%'
AND b.option_value < $time"
);
}
Giải Thích:
wp_schedule_event(): Thiết lập một cron job chạy mỗi ngày.- Câu lệnh SQL: Xóa toàn bộ transient đã hết hạn, bao gồm cả key
_transient_...và_transient_timeout_.... - An toàn và hiệu quả: Chỉ các Transients hết hạn mới bị xóa.
Lưu Ý
- Nếu bạn dùng plugin cache hoặc hệ thống object caching như Redis hoặc Memcached, hãy kiểm tra kỹ vì transients có thể không lưu trong database mà nằm ở bộ nhớ RAM.
- Đoạn mã trên chỉ chạy nếu website có người truy cập (vì WordPress cron hoạt động phụ thuộc vào người dùng). Nếu cần cron thực sự theo thời gian thực, hãy dùng WP-CLI hoặc cron server thật.
Kết Luận
Việc tự động xóa Transients hết hạn giúp bạn giữ cho cơ sở dữ liệu sạch sẽ, giảm kích thước bảng wp_options, và cải thiện hiệu suất tổng thể của website. Đây là một thủ thuật đơn giản nhưng cực kỳ hữu ích, đặc biệt với những website có lượng truy cập lớn hoặc sử dụng nhiều plugin sinh transient.
Chúc bạn tối ưu website hiệu quả và hoạt động mượt mà hơn!
Bình luận