Tổng bộ đệm W3 - làm mới bộ đệm theo chương trình [đã đóng]


21

Tôi đang xây dựng một trang web giống như Digg trong WordPress.

Sau khi cài đặt W3 Total Cache, tôi nhận thấy một số yếu tố nhất định, chẳng hạn như số phiếu (và id của cử tri) trên mỗi bài đăng được lưu vào bộ đệm ngay cả khi chúng không nên (ít nhất là sau khi người dùng bỏ phiếu cho một bài viết). Tôi cho rằng không thể ngăn các thành phần cụ thể trong một trang bị lưu vào bộ nhớ cache (hoặc là nó?), Vì vậy tôi đã nghĩ đến việc kích hoạt làm mới bộ đệm bộ đệm trang theo chương trình.

Bất kỳ đề xuất?

Câu trả lời:


21

Nếu bạn muốn xóa bộ đệm, bạn có thể làm điều đó: plugin có chức năng cho việc đó

<?php 

flush_pgcache()  //page cache
flush_dbcache()  // database cache
flush_minify()  // minify cache
flush_all() //all caches

?>

và bạn chỉ cần gọi nó như thế này:

<?php 
 $w3_plugin_totalcache->flush_all();
?>

và về cơ bản đó là câu trả lời cho câu hỏi trong tiêu đề "làm mới bộ nhớ cache theo chương trình"


12
Bạn có thể vui lòng xác định rõ ràng cách bạn khởi tạo đối tượng $ w3_plugin_totalcache không?
adamdport

3
Một phần hữu ích, làm thế nào bạn khởi tạo biến đó?
thephpdev

10

W3 Total Cache hỗ trợ bộ nhớ đệm phân đoạn. Từ FAQ:

How do I implement fragment caching? 

Edit your templates to with the following syntax to ensure that dynamic features remain so:

Example 1:
<!-- mfunc any PHP code --><!-- /mfunc -->

Example 2:
<!-- mfunc -->any PHP code<!-- /mfunc -->

Example 3:
<!--MFUNC           -->
                                      echo rand();
<!--/mfunc -->

Example 4:
<!-- mclude path/to/file.php --><!-- /mclude -->

Example 5:
<!-- mclude -->path/to/file.php<!-- /mclude -->

Cảm ơn Rast. Nhưng khi tôi sử dụng bất kỳ ví dụ nào ở trên, tôi gặp lỗi Lỗi phân tích cú pháp: lỗi cú pháp, không mong muốn '<'
user1567

@ user1567 có thể bạn không khớp với <?php ?>thẻ mở / đóng . Tôi chưa sử dụng những cái này vì vậy không có đoạn trích thực tế để hiển thị.
Rarst

Đối với một điều, tôi muốn tải hàm.php mà không lưu trữ nó. Đoạn mã sau trong Hàm.php đã kích hoạt lỗi ở trên: <? Php <! - mclude -> allow_once (Hàm2.php) <! - / mclude ->?> Mã này có gì sai?
dùng1567

1
@ user1567 theo các ví dụ, nó phải giống như ?><!-- mclude -->functions2.php<!-- /mclude --><?php(tôi nghĩ :)
Rarst

Không thể có được để làm việc bộ nhớ đệm mảnh. Vấn đề của tôi được mô tả ở đây: stackoverflow.com/questions/31125413/
Kiếm

10

Để xóa một trang duy nhất bằng id bài đăng trong w3tc v0.9.3 Tôi thấy điều này hoạt động:

if (function_exists('w3tc_pgcache_flush_post')){
 w3tc_pgcache_flush_post($post_id);
}

1
Bạn sẽ đặt mã này ở đâu? Điều này trông giống như nó chạy trên mỗi lần tải trang (đối với ID đó). Có cách nào để ngăn chặn bộ nhớ đệm hoàn toàn?
s_ha_dum

@s_ha_dum Bạn có thể tìm ra cái móc nào chúng ta có thể sử dụng mã này không?
Prafulla Kumar Sahu

Không cần thêm móc nếu sự kiện mã / plugin tùy chỉnh của bạn gắn vào thực thi sau khi plugin đã được tải, thường là trường hợp. Tất cả các chức năng có sẵn đều nằm w3-total-cache-api.phptrong thư mục plugin của W3TC.
Walf

Cảm ơn bạn, điều này hữu ích cho tôi bây giờ vào tháng 12 năm 2018. Tôi cần một cách để xóa bộ nhớ cache của trang chủ khi khách hàng truy cập vào một trang nhất định (một trang cài đặt để hiển thị khi có đại lý). Điều này rất hữu ích cho các trang cụ thể, nhưng sẽ rất tuyệt nếu có một chức năng xóa TẤT CẢ các bộ đệm như Purge All Caches nào!
Jordan Carter

9

Giải pháp của Bai Internet dường như không hiệu quả với tôi.

Tôi thành công khi sử dụng đoạn mã thay thế này trong một plugin, được tải tại hành động admin_init :

// Clear all W3 Total Cache
if( class_exists('W3_Plugin_TotalCacheAdmin') )
{
    $plugin_totalcacheadmin = & w3_instance('W3_Plugin_TotalCacheAdmin');

    $plugin_totalcacheadmin->flush_all();

    echo __('<div class="updated"><p>All <strong>W3 Total Cache</strong> caches successfully emptied.</p></div>');
}

Hy vọng điều này sẽ giúp ai đó ngoài kia.


Tôi có thể xác nhận rằng giải pháp của kevinlearynet hoạt động với W3 Total Cache phiên bản 0.9.2.4. Nó đã phá vỡ plugin của tôi sau lần nâng cấp đó và điều này có tác dụng. Cảm ơn bạn! Paul.

2
Tôi đang cố chạy cái này từ dòng lệnh. Tôi có thể hỏi làm thế nào bạn tải lớp W3_Plugin_TotalCacheAdmin không? Tôi đã cố gắng yêu cầu wp-load.php không thành công.
adamdport

5

Không có cái nào ở trên làm việc cho tôi trong plugin của tôi. Tuy nhiên điều này đã làm việc! Xác nhận làm việc cho phiên bản 0.9.2.4 của w3tc.

if (function_exists('w3tc_dbcache_flush')) { w3tc_dbcache_flush(); }

Tôi đã thực hiện "$ wpdb-> get_results (" SELECT sb_settings. f_fb_app_id, sb_settings. f_fb_secretTỪ sb_settings");" và rất ngạc nhiên khi các giá trị f_fb_secret và f_fb_app_id giống nhau mỗi lần. Đó rõ ràng là bộ đệm w3tc kết quả của truy vấn. Vì vậy, tôi đã thêm một dbcache tuôn ra trong trang sửa đổi của mình cho bảng sb_sinstall.

Nếu bạn muốn xóa bộ đệm trang, thì chỉ cần sử dụng w3tc_pgcache_flush để thay thế.


Tôi muốn các downvoter nói lý do tại sao anh ta downvot. Có điều gì sai trong câu trả lời của tôi?
Elrinth

0

Sử dụng đoạn mã này để đảm bảo PHP của bạn chạy bất kể bật hay tắt bộ đệm. Có, bạn phải viết / gọi chức năng của bạn hai lần.

<!-- mfunc echo 'caching ON'; --><?php echo 'caching OFF'; ?><!-- /mfunc -->


(Tôi nghĩ) đây là cách nó hoạt động:

  • Các điều kiện mfunc thay thế các thẻ php.
  • Nếu bộ nhớ đệm TẮT , php bên trong các bình luận mfunc xuất hiện trong đánh dấu của bạn dưới dạng một nhận xét HTML. <!-- mfunc echo "hello?"; -->Hãy ghi nhớ điều này tùy thuộc vào mức độ hạnh phúc của bạn khi mọi người thấy PHP của bạn (chỉ xảy ra khi tắt bộ đệm).
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.