W3 total cache - reîmprospătarea cache-ului programatic

17 ian. 2011, 15:20:04
Vizualizări: 40K
Voturi: 26

Construiesc un site de tip Digg în WordPress.

După instalarea W3 Total Cache, am observat că anumite elemente precum numărul de voturi (și ID-urile votanților) per postare sunt stocate în cache chiar dacă nu ar trebui să fie (cel puțin nu după ce un utilizator votează un articol). Presupun că nu este posibil să împiedic stocarea în cache a unor elemente specifice dintr-o pagină (sau este?), așa că m-am gândit să declanșez reîmprospătarea cache-ului paginii programatic.

Aveți sugestii?

0
Toate răspunsurile la întrebare 6
3
21

dacă doriți să goliți memoria cache, puteți face asta: pluginul are funcții pentru aceasta

<?php 

flush_pgcache()  // memoria cache a paginilor
flush_dbcache()  // memoria cache a bazei de date
flush_minify()  // memoria cache pentru minify
flush_all() //toate memoriile cache

?>

și trebuie doar să o apelați astfel:

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

și acesta este răspunsul la întrebarea din titlu "reîmprospătare cache programatic"

17 ian. 2011 19:23:06
Comentarii

Poți să definești explicit cum ai instanțiat obiectul $w3_plugin_totalcache?

adamdport adamdport
27 feb. 2014 17:35:50

Parțial util, cum ai instanțiat acea variabilă?

thephpdev thephpdev
23 ian. 2017 14:29:53

declară o nouă instanță a clasei și apoi referențiază acea metodă. https://plugins.trac.wordpress.org/browser/w3-total-cache/trunk/CacheFlush.php. if(class_exists('CacheFlush') ){ $CacheFlush = new CacheFlush; $CacheFlush::flush_post(get_option('page_on_front')); }

RobBenz RobBenz
11 oct. 2022 22:06:06
4
12

Pentru a curăța un singur articol după ID în w3tc v0.9.3, am constatat că această soluție funcționează:

if (function_exists('w3tc_pgcache_flush_post')){
 w3tc_pgcache_flush_post($post_id);
}
21 mar. 2014 00:08:59
Comentarii

Unde ai plasa acest cod? Se pare că rulează la fiecare încărcare de pagină (pentru acel ID). Nu există nicio modalitate de a preveni complet stocarea în cache?

s_ha_dum s_ha_dum
21 mar. 2014 00:31:44

@s_ha_dum Ai putea să afli cu ce hook putem folosi acest cod?

Prafulla Kumar Sahu Prafulla Kumar Sahu
17 nov. 2016 10:42:30

Nu sunt necesare hook-uri suplimentare dacă evenimentul la care se atașează codul/pluginul tău personalizat se execută după ce plugin-urile s-au încărcat, ceea ce este de obicei cazul. Toate funcțiile disponibile sunt în w3-total-cache-api.php din directorul pluginului W3TC.

Walf Walf
1 aug. 2018 05:29:19

Mulțumesc, acest lucru a fost util pentru mine acum în Decembrie 2018. Aveam nevoie de o metodă pentru a goli cache-ul paginii de start după ce clientul vizita o anumită pagină (o pagină de setări pentru afișarea disponibilității unui agent). Acest lucru este foarte util pentru pagini specifice, dar ar fi bine dacă ar exista o funcție care să golească TOATE cache-urile, așa cum face funcția "Purge All Caches"!

Jordan Carter Jordan Carter
1 dec. 2018 23:47:22
2
11

Soluția lui Bainternet nu a funcționat în cazul meu.

Folosesc cu succes acest fragment alternativ de cod într-un plugin, încărcat la acțiunea admin_init:

// Șterge toate cache-urile 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>Toate cache-urile <strong>W3 Total Cache</strong> au fost golite cu succes.</p></div>');
}

Sper că acest lucru îi va ajuta pe alții.

19 sept. 2011 19:02:40
Comentarii

Pot confirma că soluția lui kevinlearynet funcționează cu W3 Total Cache versiunea 0.9.2.4. Plugin-ul meu a încetat să funcționeze după această actualizare, iar această soluție funcționează perfect. Mulțumesc! Paul.

User User
4 oct. 2011 21:55:31

Încerc să rulez acest lucru din linia de comandă. Pot întreba cum ai încărcat clasa W3_Plugin_TotalCacheAdmin? Am încercat să includ wp-load.php fără succes.

adamdport adamdport
27 feb. 2014 00:56:59
5
10

W3 Total Cache suportă caching de fragmente. Din întrebările frecvente (FAQ):

Cum implementez caching-ul de fragmente?

Editează șabloanele cu următoarea sintaxă pentru a asigura că funcționalitățile dinamice rămân astfel:

Exemplul 1:
<!-- mfunc orice cod PHP --><!-- /mfunc -->

Exemplul 2:
<!-- mfunc -->orice cod PHP<!-- /mfunc -->

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

Exemplul 4:
<!-- mclude calea/către/fisier.php --><!-- /mclude -->

Exemplul 5:
<!-- mclude -->calea/către/fisier.php<!-- /mclude -->
17 ian. 2011 16:06:28
Comentarii

Mulțumesc Rast. Dar când folosesc oricare dintre exemplele de mai sus, primesc o eroare Parse error: syntax error, unexpected '<'

user1567 user1567
17 ian. 2011 16:34:55

@user1567 probabil ai o nepotrivire între tag-urile de deschidere/închidere <?php ?>. Încă nu le-am folosit așa că nu am un fragment practic de cod de arătat.

Rarst Rarst
17 ian. 2011 16:57:59

Pentru început, aș dori să încărc functions.php fără a-l cache-ui. Următorul cod din functions.php a declanșat eroarea menționată mai sus: <?php <!-- mclude -->require_once(functions2.php)<!-- /mclude --> ?> Ce este greșit în acest cod?

user1567 user1567
17 ian. 2011 17:20:31

@user1567 conform exemplelor ar trebui să fie ceva de genul ?><!-- mclude -->functions2.php<!-- /mclude --><?php (cred eu :)

Rarst Rarst
17 ian. 2011 17:36:08

Nu reușesc să fac fragment caching să funcționeze. Problema mea este descrisă aici: http://stackoverflow.com/questions/31125413/w3-total-cache-and-fragment-cache-not-able-get-it-to-work

JackTheKnife JackTheKnife
30 iun. 2015 19:38:48
2

Niciuna dintre soluțiile de mai sus nu a funcționat pentru plugin-ul meu. Totuși, aceasta a funcționat! Confirmat că funcționează pentru versiunea 0.9.2.4 a w3tc.

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

Am rulat o interogare: " $wpdb->get_results( "SELECT sb_settings.f_fb_app_id,sb_settings.f_fb_secret FROM sb_settings" ); " și am fost surprins să văd că valorile f_fb_secret și f_fb_app_id erau aceleași de fiecare dată. Era evident că w3tc stoca în cache rezultatul interogării. Așa că am adăugat o curățare a cache-ului de baze de date în pagina de modificare a tabelului sb_settings.

Dacă doriți să curățați cache-ul de pagini, folosiți w3tc_pgcache_flush în schimb.

10 apr. 2013 01:36:08
Comentarii

Aș dori ca cel care a votat negativ să spună de ce a făcut-o. Este ceva greșit în răspunsul meu?

Elrinth Elrinth
12 apr. 2013 11:19:36

Asta a funcționat pentru mine: if (function_exists('w3tc_flush_all')) { w3tc_flush_all(); }

Puteți găsi alte funcții în w3-total-cache-api.php

P.O.W. P.O.W.
9 dec. 2020 17:24:17
0

Folosește acest fragment de cod pentru a te asigura că PHP-ul tău rulează indiferent dacă caching-ul este activat sau dezactivat. Da, trebuie să scrii/apelezi funcția ta de două ori.

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


(Cred că) așa funcționează:

  • Condițiile mfunc înlocuiesc tag-urile PHP.
  • Dacă caching-ul este DEZACTIVAT, PHP-ul din interiorul comentariilor mfunc apare în markup-ul tău ca comentarii HTML. <!-- mfunc echo "hello?"; --> Ține cont de asta în funcție de cât de confortabil ești ca oamenii să îți vadă codul PHP (se întâmplă doar când caching-ul este dezactivat).
11 feb. 2012 03:03:08