Tự động xóa Transients không còn sử dụng trong WordPress

Transients là một hệ thống lưu tạm dữ liệu có thời hạn trong WordPress, giúp giảm tải cho cơ sở dữ liệu bằng cách cache lại các truy vấn hoặc dữ liệu tạm thời. Tuy nhiên, nếu không được dọn dẹp đúng cách, các Transients hết hạn hoặc không còn sử dụng sẽ tồn đọng trong cơ sở dữ liệu, làm chậm hiệu suất website về lâu dài.

Tự động xóa Transients không còn sử dụng trong WordPress

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_name
  • transient_value
  • expiration – 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_..._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


  • Không có bình luận.

Init Toolbox

Nhấn Ctrl + \ trên máy tính, hoặc vuốt sang trái ở bất kỳ đâu trên mobile.

Đăng nhập





Đang tải...