Trong 2 bài viết gần đây, tôi đã hướng dẫn cho các bạn cách tinh giản WordPress và WooCommerce giúp loại bỏ những tính năng không cần thiết rồi phải không nào? Nếu chưa xem, bạn hoàn toàn có thể theo dõi chúng trong phần link tham khảo ở bên dưới. Điểm chung của 2 bài viết này là đều có giới thiệu cách vô hiệu hóa tính năng Cart Fragments của WooCommerce. Vậy Cart Fragments là gì? Tại sao đã hướng dẫn trước đó rồi mà tôi vẫn tiếp tục viết bài viết hôm nay? Điều đó có quá thừa thãi.
WooCommerce Cart Fragments là gì?
Khi kiểm tra tốc độ load của website (có cài WooCommerce và sử dụng biểu tượng giỏ hàng) bằng các công cụ như GTmetrix hay Pingdom, có thể bạn sẽ thấy thông báo gợi ý bật GZIP cho một tài nguyên có tên kết thúc bằng ?wc-ajax=get_refreshed_fragments
.
Tài nguyên này thường có thời gian tải rất lâu (hơn hẳn những thành phần khác), ảnh hưởng nhiều tới tốc độ load web tổng thể. Nó không phải JS, CSS, Web Fonts, hình ảnh… nên trên thực tế bạn cũng chẳng có cách nào để bật nén GZIP cho nó cả. Đây chính là tính năng Cart Fragments của WooCommerce, có tác dụng cập nhật thông tin trên biểu tượng giỏ hàng của bạn bằng AJAX mà không cần phải load lại trang. Điều này cũng có nghĩa là AJAX không bị ảnh hưởng bởi cách plugin cache dữ liệu, cũng như không thể bị cache.
Cách duy nhất để xử lý vấn đề do Cart Fragments gây ra đối với tốc độ load của website chính là vô hiệu hóa nó.
Đối với theme Paradise
Nếu bạn đang sử dụng theme Paradise do WP Căn bản phát triển thì tất cả những gì bạn cần làm là:
1. Cập nhật theme lên phiên bản mới nhất.
2. Truy cập vào Giao diện => Tùy biến => Thiết lập giao diện => Tối ưu tốc độ => Chuyển mục Vô hiệu hóa Cart Fragments sang trạng thái Có rồi lưu lại.
Vô hiệu hóa Cart Fragments bằng code snippets
Nếu bạn không phải là “tín đồ” của plugin thì có thể chèn 1 trong 2 đoạn code snippets sau đây vào file functions.php
của theme hoặc child theme mà bạn đang sử dụng. Các bạn cũng có thể sử dụng plugin Code Snippets để chèn nhằm tránh nó bị xóa mất khi cập nhật theme:
- Vô hiệu hóa trên trang chủ:
1
2
|
add_action( 'wp_enqueue_scripts' , 'dequeue_woocommerce_cart_fragments' , 11); function dequeue_woocommerce_cart_fragments() { if (is_front_page()) wp_dequeue_script( 'wc-cart-fragments' ); } |
- Vô hiệu hóa trên trang chủ và các bài viết:
1
2
3
4
|
add_action( 'wp_enqueue_scripts' , 'dequeue_woocommerce_cart_fragments' , 11); function dequeue_woocommerce_cart_fragments() { if (is_front_page() || is_single() ) wp_dequeue_script( 'wc-cart-fragments' ); } |
Hạn chế của phương pháp này là bạn sẽ phải tiến hành thêm bước thiết lập chuyển hướng khách truy cập về trang giỏ hàng sau khi họ thêm một sản phẩm nào đó vào giỏ. Hãy truy cập WooCommerce => Settings => Products => tick vào mục Redirect to the cart page after successful addition và bỏ tick trong mục Enable AJAX add to cart buttons on archives => Save Changes.
Làm tương tự nếu bạn vô hiệu hóa Cart Fragments bằng plugin Unbloater hoặc Disable WooCommerce Bloat đã được giới thiệu trong các bài viết trước.
Vô hiệu hóa Cart Fragments bằng plugin
Để đỡ mất thời gian và đem lại hiệu quả tốt nhất, tôi khuyên các bạn nên vô hiệu hóa Cart Fragments bằng một plugin có tên là Disable Cart Fragments by Optimocha (download). Tất cả những gì bạn cần làm là cài đặt và kích hoạt nó.
Với cơ chế hoạt động dựa vào cookie của Disable Cart Fragments by Optimocha, giỏ hàng sẽ tự động được cập nhật thông tin bằng JS (chứ không phải AJAX) nếu nó không trống. Plugin này hoạt động tốt với các plugin tạo cache như LiteSpeed Cache, WP Rocket… Bạn cũng không cần phải thiết lập chuyển hướng tới trang giỏ hàng như khi sử dụng code snippets nữa.
Cuối cùng, hãy xóa cache website (nếu có) và kiểm tra kết quả nhé. Chúc các bạn thành công!