W3 total cache - reîmprospătarea cache-ului programatic
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?

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"

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

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')); }

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 Ai putea să afli cu ce hook putem folosi acest cod?

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.

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

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.

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.

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

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

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

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 conform exemplelor ar trebui să fie ceva de genul ?><!-- mclude -->functions2.php<!-- /mclude --><?php
(cred eu :)

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

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.

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