Tự động xóa cache ở plugin LiteSpeed

Thay vì nhấp thủ công vào nút xóa cache trong bảng quản trị WordPress, bạn có thể xóa cache bằng code hoặc áp dụng theo logic riêng của mình. Trong bài viết này tôi sẽ chia sẻ cách để bạn có thể tự setup việc tự động xóa cache ở plugin LiteSpeed tuỳ theo nhu cầu.

WordPress LiteSpeed Cache (LSCWP) là một plugin cache rất mạnh mẽ. Phần lớn các website WordPress được lưu trữ trên máy chủ LiteSpeed sẽ sử dụng nó. Nếu bạn đang sử dụng WooCommerce, cache đóng vai trò quan trọng nhưng bạn cũng cần phải cẩn thận khi sử dụng. Cache trang có thể là bạn của bạn và cũng có thể là kẻ thù gây đau đầu nhất nếu bạn không làm đúng cách.

Plugin này có hơn 7 triệu cài đặt đang hoạt động.

Trường hợp sử dụng / Vấn đề

Website WooCommerce sẽ tổ chức khuyến mãi trong một khoảng thời gian nhất định, như khuyến mãi Black Friday từ ngày A đến ngày B. Chủ WooCommerce sau đó sẽ sử dụng một số plugin giảm giá động để thiết lập khuyến mãi từ ngày A đến ngày B một cách dễ dàng chỉ bằng vài cú nhấp chuột.

Tuy nhiên, nếu bạn đang sử dụng plugin cache trang, bạn có thể gặp phải vấn đề như giá khuyến mãi hoặc giảm giá không hiển thị khi đến ngày A. Điều này có thể là do cache trang cụ thể được tạo trước ngày A và cache trang vẫn chưa hết hạn (đang được phục vụ), và đó là lý do tại sao khách truy cập của bạn vẫn sẽ thấy trang sản phẩm với giá gốc.

Vâng, tôi biết khi khách truy cập thêm những sản phẩm giảm giá đó vào giỏ hàng, họ vẫn sẽ nhận được giá giảm (trang giỏ hàng và thanh toán thường được cấu hình là các trang loại trừ cache), nhưng đây có phải là điều bạn muốn không?

Do đó, việc xóa cache theo lập trình là cần thiết. Nếu nó được cấu hình như đã lên lịch thì sẽ rất tuyệt! Chẳng hạn như lên lịch hành động xóa tất cả hàng ngày chính xác vào 00:00:00 theo múi giờ trang web của bạn. Sau đó vấn đề trên sẽ được giải quyết.

Kích hoạt việc xóa cache

Bằng cách sử dụng mã bên dưới, bạn có thể xóa tất cả các cache trong LiteSpeed Cache cho WordPress. Bạn có thể thử sử dụng nó trên shortcode tùy chỉnh cho mục đích thử nghiệm.

<?php
// bọc điều này trong một hàm
if (class_exists('\LiteSpeed\Purge')) {
  \LiteSpeed\Purge::purge_all();
}

// cách khác
if (class_exists('\LiteSpeed\Purge')) {
  do_action('litespeed_purge_all');
}
?>

Thiết lập lịch trong WP Cron

Tiếp theo, hãy tạo một lịch trình trong WP Cron. Xin lưu ý rằng bạn cũng phải cấu hình để sử dụng cronjob máy chủ để thực thi WP Cron để lịch trình WP Cron sẽ được thực hiện đúng giờ. Nếu không, việc này sẽ thất bại vì WP Cron mặc định chỉ được kích hoạt khi có người truy cập vào trang web của bạn.

<?php
// Đăng ký một lịch trình cron mới với khoảng thời gian 86400 giây
add_filter( 'cron_schedules', 'add_vts_cron_schedule' );
function add_vts_cron_schedule( $schedules ) { 
    if(!isset($schedules["vutruso_daily"])){
        $schedules['vutruso_daily'] = array(
            'interval' => 86400,
            'display'  => esc_html__( 'Itchycode Mỗi Ngày' ), );
    }
    return $schedules;
}

// Lên lịch cho công việc tùy chỉnh của chúng ta, tôi sẽ đặt nó thực hiện hàng ngày vào 00:00:05 (GMT+8)
// Thời gian này là để đảm bảo khách truy cập đầu tiên vào trang web của tôi sẽ sau một ngày mới dựa trên hành vi khuyến mãi của tôi (ngày bắt đầu + ngày kết thúc)
if ( ! wp_next_scheduled( 'vutruso_daily' ) ) {
    wp_schedule_event( strtotime('00:00:05 Asia/Ho_Chi_Minh'), 'vutruso_daily', 'vutruso_daily' );
}

// Bây giờ hãy kết nối nó với hàm của chúng ta
add_action( 'vutruso_daily','clear_litespeed_cache' );

function clear_litespeed_cache() {
    if (class_exists('\LiteSpeed\Purge')) {
        \LiteSpeed\Purge::purge_all();
    }
}
?>

Thực tế là mã sẽ hoạt động ok thôi, cron sẽ xóa tất cả các cache trong LiteSpeed Cache cho WordPress, dưới đây là cách kiểm tra xem chúng có hoạt động không.

WP Control để kiểm tra tất cả các tác vụ đã lên lịch

Tôi hay sử dụng plugin WP Control để kiểm tra xem các công việc WP Cron có được thực hiện đúng cách hay không, kiểm tra bất kỳ tác vụ lạ nào được lên lịch bởi các plugin khác, v.v.

Bây giờ, chỉ cần đi đến Công cụ > Sự kiện Cron, tác vụ lên lịch tùy chỉnh của bạn sẽ hiển thị ở đó.

Tóm tắt

Nếu bạn không sử dụng LiteSpeed Cache cho WordPress, bạn vẫn có thể làm tương tự miễn là bạn tìm ra cách xóa cache theo lập trình. Khi có được nó, chỉ cần sử dụng cùng một cách để lên lịch cho tác vụ, và tất cả sẽ hoạt động trơn tru.

Các hàm/hooks WordPress được sử dụng trong ví dụ này:

  • cron_schedules
  • wp_next_scheduled
  • litespeed_purge_all
  • \LiteSpeed\Purge::purge_all()

Thông tin bổ sung về LiteSpeed Cache

1. Tổng quan về LiteSpeed Cache

LiteSpeed Cache là một trong những plugin cache toàn diện nhất cho WordPress, được phát triển bởi LiteSpeed Technologies. Plugin này không chỉ cung cấp tính năng cache trang mà còn bao gồm nhiều tính năng tối ưu hóa như:

  • Cache đối tượng
  • Tối ưu hóa CSS/JS
  • Lazy load hình ảnh
  • Tối ưu hóa hình ảnh
  • Tích hợp CDN
  • Hỗ trợ HTTP/2
  • Và nhiều tính năng khác

2. Các loại cache trong LiteSpeed Cache

LiteSpeed Cache có nhiều loại cache khác nhau mà bạn có thể kiểm soát:

a. Cache Trang (Page Cache)

Cache trang lưu trữ toàn bộ trang HTML đã tạo, giúp giảm thời gian tải trang đáng kể.

b. Cache Đối Tượng (Object Cache)

Cache đối tượng lưu trữ kết quả truy vấn cơ sở dữ liệu, giúp giảm tải cho cơ sở dữ liệu.

c. Cache Browser (Browser Cache)

Thiết lập các tiêu đề HTTP để trình duyệt của người dùng lưu trữ tài nguyên tĩnh, giảm số lượng yêu cầu đến máy chủ.

Để xóa từng loại cache này theo lập trình, bạn có thể sử dụng các phương thức sau:

<?php
// Xóa cache trang
if (class_exists('\LiteSpeed\Purge')) {
    \LiteSpeed\Purge::purge_all_pages();
}

// Xóa cache đối tượng
if (class_exists('\LiteSpeed\Purge')) {
    \LiteSpeed\Purge::purge_all_object();
}

// Xóa tất cả cache 
if (class_exists('\LiteSpeed\Purge')) {
    \LiteSpeed\Purge::purge_all();
}
?>

3. Xóa cache cho một URL cụ thể

Đôi khi bạn chỉ muốn xóa cache cho một URL cụ thể thay vì toàn bộ cache. Ví dụ, khi bạn cập nhật một bài viết hoặc sản phẩm cụ thể:

<?php
// Xóa cache cho một URL cụ thể
if (class_exists('\LiteSpeed\Purge')) {
    $url = 'https://example.com/san-pham/san-pham-abc/';
    \LiteSpeed\Purge::purge_url($url);
}
?>

4. Xóa cache theo tag

LiteSpeed Cache sử dụng hệ thống tag để quản lý cache. Bạn có thể xóa cache theo tag cụ thể:

<?php
// Xóa cache theo tag
if (class_exists('\LiteSpeed\Purge')) {
    \LiteSpeed\Purge::purge_tag('post_123'); // Xóa cache cho bài viết có ID 123
    \LiteSpeed\Purge::purge_tag('product_456'); // Xóa cache cho sản phẩm có ID 456
}
?>

5. Tự động xóa cache khi nội dung được cập nhật

WordPress có các hooks khi nội dung được cập nhật. Bạn có thể sử dụng chúng để tự động xóa cache:

<?php
// Xóa cache khi bài viết được cập nhật
add_action('save_post', 'purge_post_cache', 10, 2);
function purge_post_cache($post_id, $post) {
    if (class_exists('\LiteSpeed\Purge') && !wp_is_post_revision($post_id) && !wp_is_post_autosave($post_id)) {
        // Xóa cache cho bài viết cụ thể
        \LiteSpeed\Purge::purge_post($post_id);
    }
}
?>

6. Tối ưu hóa LiteSpeed Cache cho WooCommerce

Đối với các trang web WooCommerce, bạn cần cẩn thận hơn khi sử dụng cache. Dưới đây là một số cài đặt được khuyến nghị:

  1. Loại trừ các trang động: Đảm bảo các trang như giỏ hàng, thanh toán, tài khoản được loại trừ khỏi cache.
  2. Xóa cache khi giá thay đổi:
<?php
// Xóa cache khi giá sản phẩm thay đổi
add_action('woocommerce_product_object_updated_props', 'purge_product_cache_on_price_change', 10, 2);
function purge_product_cache_on_price_change($product, $updated_props) {
    if (in_array('price', $updated_props) || in_array('sale_price', $updated_props)) {
        if (class_exists('\LiteSpeed\Purge')) {
            \LiteSpeed\Purge::purge_post($product->get_id());
        }
    }
}
?>
  1. Xóa cache khi tồn kho thay đổi:
<?php
// Xóa cache khi tồn kho thay đổi
add_action('woocommerce_reduce_order_stock', 'purge_cache_on_stock_change');
function purge_cache_on_stock_change($order) {
    if (class_exists('\LiteSpeed\Purge')) {
        \LiteSpeed\Purge::purge_all_pages();
    }
}
?>

7. Cài đặt Cron thật (Real Cron) thay vì WP Cron

Như đã đề cập trong bài viết gốc, WP Cron mặc định chỉ được kích hoạt khi có người truy cập vào trang web. Để đảm bảo các tác vụ lên lịch của bạn luôn chạy đúng giờ, bạn nên thiết lập cron thật:

  1. Vô hiệu hóa WP Cron mặc định bằng cách thêm dòng sau vào file wp-config.php:
define('DISABLE_WP_CRON', true);
  1. Thiết lập cron job trên máy chủ để chạy WP Cron:
*/5 * * * * wget -q -O /dev/null https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1

hoặc

*/5 * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron > /dev/null 2>&1

8. Giám sát hiệu suất cache

Để đảm bảo hệ thống cache hoạt động hiệu quả, bạn nên giám sát tỷ lệ cache hit/miss. LiteSpeed Cache cung cấp công cụ để xem thống kê này trong bảng quản trị.

Bạn cũng có thể lấy thông tin này theo lập trình:

<?php
// Lấy thống kê cache
if (class_exists('\LiteSpeed\Core')) {
    $stats = \LiteSpeed\Core::get_instance()->get_stats();
    echo 'Cache Hit: ' . $stats['cache_hit'];
    echo 'Cache Miss: ' . $stats['cache_miss'];
}
?>

9. Các khuyến nghị bảo mật cho LiteSpeed Cache

  1. Kiểm soát quyền truy cập xóa cache:
<?php
// Chỉ cho phép admin xóa cache
add_action('before_litespeed_purge_all', 'check_purge_permission');
function check_purge_permission() {
    if (!current_user_can('manage_options')) {
        wp_die('Bạn không có quyền xóa cache');
    }
}
?>
  1. Giới hạn các API xóa cache:
<?php
// Thêm nonce để bảo vệ các hành động xóa cache
function secure_purge_cache_action() {
    if (isset($_GET['action']) && $_GET['action'] == 'purge_cache') {
        if (!isset($_GET['_wpnonce']) || !wp_verify_nonce($_GET['_wpnonce'], 'purge_cache_action')) {
            wp_die('Lỗi bảo mật');
        }
        
        if (class_exists('\LiteSpeed\Purge')) {
            \LiteSpeed\Purge::purge_all();
        }
        
        wp_redirect(admin_url());
        exit;
    }
}
add_action('admin_init', 'secure_purge_cache_action');
?>

10. Xóa cache theo lịch trình dựa trên sự kiện

Ngoài việc xóa cache hàng ngày, bạn có thể muốn xóa cache dựa trên các sự kiện cụ thể:

<?php
// Xóa cache khi có sản phẩm mới được thêm vào
add_action('woocommerce_new_product', 'purge_cache_on_new_product');
function purge_cache_on_new_product($product_id) {
    if (class_exists('\LiteSpeed\Purge')) {
        \LiteSpeed\Purge::purge_all_pages();
    }
}

// Xóa cache khi có bình luận mới
add_action('comment_post', 'purge_cache_on_new_comment', 10, 2);
function purge_cache_on_new_comment($comment_id, $comment_approved) {
    if ($comment_approved === 1) {
        $comment = get_comment($comment_id);
        if (class_exists('\LiteSpeed\Purge')) {
            \LiteSpeed\Purge::purge_post($comment->comment_post_ID);
        }
    }
}
?>

Hy vọng những thông tin bổ sung này sẽ giúp bạn hiểu rõ hơn và tận dụng tối đa plugin LiteSpeed Cache trên trang WordPress của mình!

5/5 - (10 votes)

donate Nếu bạn thấy bài viết có ích bạn có thể donate cho team hoặc chia sẻ bài viết này. Ngoài ra bạn có thể yêu cầu thêm bài viết tại đây
Đã copy
vutruso

Vũ Trụ Số chuyên cung cấp hosting cho WordPress, dịch vụ thiết kế website, quản trị website cho doanh nghiệp, dịch vụ quảng cáo Google, quảng cáo Facebook, các dịch vụ bảo mật website WordPress, tăng tốc website WordPress

Bài viết liên quan