แคชทั้งหมดของ W3 - การรีเฟรชแคชโดยทางโปรแกรม [ปิด]


21

ฉันกำลังสร้างเว็บไซต์เช่น Digg ใน WordPress

หลังจากติดตั้งแคช W3 ทั้งหมดฉันสังเกตเห็นองค์ประกอบบางอย่างเช่นจำนวนคะแนน (และรหัสผู้ลงคะแนน) ต่อโพสต์จะถูกแคชแม้ว่าพวกเขาจะไม่ควร (อย่างน้อยก็หลังจากผู้ใช้โหวตบทความ) ฉันคิดว่ามันเป็นไปไม่ได้ที่จะป้องกันไม่ให้องค์ประกอบเฉพาะในหน้าถูกแคช (หรือมันคืออะไร) ดังนั้นฉันคิดว่าการเรียกแคชหน้ารีเฟรชโดยทางโปรแกรม

ข้อเสนอแนะใด ๆ

คำตอบ:


21

ถ้าคุณต้องการล้างแคชคุณสามารถทำได้: ปลั๊กอินมีฟังก์ชั่นสำหรับสิ่งนั้น

<?php 

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

?>

และคุณต้องเรียกมันว่า:

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

และนั่นเป็นคำตอบสำหรับคำถามในชื่อ "การรีเฟรชแคชโดยทางโปรแกรม"


12
คุณช่วยกรุณากำหนดวิธีการที่คุณสร้างอินสแตนซ์ของออบเจ็กต์ $ w3_plugin_totalcache ได้อย่างชัดเจนหรือไม่?
adamdport

3
มีประโยชน์บางส่วนคุณสร้างอินสแตนซ์ของตัวแปรนั้นได้อย่างไร
thephpdev

10

W3 Total Cache รองรับการแคชแฟรกเมนต์ จากคำถามที่พบบ่อย:

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 -->

ขอบคุณ Rast แต่เมื่อฉันใช้ตัวอย่างใด ๆ ข้างต้นฉันได้รับข้อผิดพลาดในการแยกวิเคราะห์ข้อผิดพลาดทางไวยากรณ์ผิดพลาด '<'
user1567

@ user1567 คุณอาจไม่ตรงกันกับการเปิด / ปิด<?php ?>แท็ก ฉันยังไม่ได้ใช้สิ่งเหล่านี้ดังนั้นจึงไม่มีตัวอย่างข้อมูลจริงที่จะแสดง
Rarst

สำหรับสิ่งหนึ่งฉันต้องการโหลด function.php โดยไม่ต้องแคช รหัสต่อไปนี้ใน functions.php ทำให้เกิดข้อผิดพลาดด้านบน: <? php <! - mclude -> require_once (function2.php) <! - / mclude ->?> รหัสผิดปกติกับอะไร
user1567

1
@ user1567 ตามตัวอย่างที่มันควรจะเป็นสิ่งที่ชอบ?><!-- mclude -->functions2.php<!-- /mclude --><?php(ฉันคิดว่า :)
Rarst

ไม่สามารถแคชชิ้นส่วนได้ ปัญหาของฉันอธิบายไว้ที่นี่: stackoverflow.com/questions/31125413/ …
JackTheKnife

10

เพื่อล้างหน้าเดียวโดยโพสต์ ID ใน w3tc v0.9.3 ฉันพบว่ามันทำงาน:

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

1
คุณจะวางรหัสนี้ที่ไหน ดูเหมือนว่าจะทำงานในทุก ๆ หน้าโหลด (สำหรับรหัสนั้น) ไม่มีวิธีป้องกันการแคชอย่างสมบูรณ์หรือไม่?
s_ha_dum

@s_ha_dum คุณจะทราบได้ไหมว่าเราสามารถใช้รหัสนี้กับตะขออะไรได้บ้าง
Prafulla Kumar Sahu

ไม่จำเป็นต้องใช้ hooks พิเศษหากเหตุการณ์ที่โค้ด / ปลั๊กอินที่กำหนดเองของคุณเชื่อมต่อเพื่อดำเนินการหลังจากปลั๊กอินโหลดแล้วซึ่งโดยปกติจะเป็นกรณี ฟังก์ชั่นทั้งหมดที่มีอยู่จะอยู่w3-total-cache-api.phpในปลั๊กอินของ W3TC
วอล

ขอบคุณตอนนี้มีประโยชน์สำหรับฉันในเดือนธันวาคม 2018 ฉันต้องการวิธีการล้างแคชของโฮมเพจเมื่อลูกค้าเข้าเยี่ยมชมหน้าหนึ่ง (หน้าการตั้งค่าเพื่อแสดงเมื่อตัวแทนพร้อมใช้งาน) สิ่งนี้มีประโยชน์มากสำหรับหน้าเว็บเฉพาะ แต่มันจะดีถ้ามีฟังก์ชั่นที่ล้างแคชทั้งหมดเช่นล้างแคชทั้งหมด!
Jordan Carter

9

ทางออกของ Bainternet ดูเหมือนจะไม่เหมาะกับฉัน

ฉันใช้ตัวอย่างข้อมูลทางเลือกนี้สำเร็จแล้วในปลั๊กอินโหลดได้ที่การทำงานของ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>');
}

หวังว่านี่จะช่วยให้ใครบางคนที่นั่น


ฉันสามารถยืนยันได้ว่าโซลูชันของ kevinlearynet นั้นใช้งานได้กับ W3 Total Cache เวอร์ชัน 0.9.2.4 มันยากจนสำหรับปลั๊กอินของฉันหลังจากการอัพเกรดและใช้งานได้ดี ขอขอบคุณ! พอล

2
ฉันพยายามเรียกใช้จากบรรทัดคำสั่ง ฉันสามารถถามวิธีที่คุณโหลดคลาส W3_Plugin_TotalCacheAdmin ได้อย่างไร ฉันพยายามให้ wp-load.php ไม่มีประโยชน์
adamdport

5

ไม่มีการทำงานใด ๆ สำหรับฉันในปลั๊กอินของฉัน อย่างไรก็ตามสิ่งนี้ได้ผล! ยืนยันว่าใช้งานได้กับรุ่น 0.9.2.4 จาก w3tc

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

ฉันทำ "$ wpdb-> get_results (" SELECT sb_settings. f_fb_app_id, sb_settings. f_fb_secretFROM sb_settings");" และรู้สึกประหลาดใจที่ค่า f_fb_secret และ f_fb_app_id เหมือนกันทุกครั้ง เห็นได้ชัดว่ามันเป็น w3tc ที่แคชผลลัพธ์ของแบบสอบถาม ดังนั้นฉันจึงเพิ่ม dbcache flush ในหน้าแก้ไขของฉันสำหรับตาราง sb_settings

หากคุณต้องการล้างแคชของหน้าเว็บจากนั้นใช้ w3tc_pgcache_flush แทน


ฉันต้องการให้ผู้ลงคะแนนพูดว่าทำไมเขาลงคะแนน มีคำตอบอะไรผิดหรือเปล่า?
Elrinth

0

ใช้ส่วนย่อยนี้เพื่อให้แน่ใจว่า PHP ของคุณทำงานโดยไม่คำนึงว่าแคชเปิดหรือปิดอยู่ ใช่คุณต้องเขียน / เรียกฟังก์ชั่นของคุณสองครั้ง

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


(ฉันคิดว่า) นี่เป็นวิธีการทำงาน:

  • เงื่อนไข mfunc แทนที่แท็ก php
  • หากการแคชปิดอยู่ php ภายในความคิดเห็น mfunc จะปรากฏในมาร์กอัปของคุณเป็นความคิดเห็น HTML <!-- mfunc echo "hello?"; -->จำไว้ว่าขึ้นอยู่กับว่าคุณมีความสุขแค่ไหนที่คนอื่นเห็น PHP ของคุณ (เกิดขึ้นเมื่อปิดการแคช)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.